Jump to content

[C++] String-To-Int-Funktion für eine als String übergebene Uhrzeit

Empfohlene Beiträge

Hallo ihr Lieben,

ich lerne gerade für eine Klassenarbeit (1. Ausbildungsjahr, Anwendungsentwicklung, C++) und stehe vor folgendem Problem, auf dessen Lösung ich einfach nicht kommen will, obwohl es wahrscheinlich recht einfach und schlicht ist:

Die Aufgabe verlangt, dass ich eine Funktion schreibe, die einen String in diesem Format übergeben bekommt: 00:00:00.

Die Funktion soll aus diesem String dann die Differenz der angegebenen Zeitspanne zu Mitternacht in Sekunden berechnen.

Wenn also zum Beispiel die Uhrzeit 01:30:14 eingegeben wird, soll mir die Funktion am Ende 5414 zurückliefern.

Mein Ansatz war es nun den eingebeben Uhrzeit-String an den ":" zu trennen und dann eben den ersten Teil mal 3600 zu nehmen, den zweiten mal 60 und den dritten dann dazu zu addieren.

Geht es auch irgendwie einfacher und ich denke vielleicht zu kompliziert? Denn als ich diesen Ansatz verfolgt habe, hatte ich am Ende vier ineinander verschachtelte For-Schleifen, die letztendlich doch nicht das gemacht haben, was sie sollten..

Aus dem Grund hab ich momentan leider auch keinen Code zum Vorzeigen.

Aber vielleicht könnt ihr mir sagen, ob meine Vorgehensweise so richtig ist, wie ich es mir notiert habe:

- Ich durchsuche den String auf die Doppelpunkte

- Die beiden Zeichen vor dem Doppelpunkt speichere ich mir in einer Variablen (beim ersten Doppelpunkt zB in Stunden und beim zweiten in Minuten)

- Sobald es keinen Doppelpunkt mehr gibt, ziehe ich die Zeichen bis zum zweiten Doppelpunkt vom Gesamtstring ab und speichere den Rest in einer weiteren Variable (zb Sekunden)

- Danach wandle ich die Stringvariablen in Integervariablen um und multipliziere sie mit den jeweiligen Werten, damit alle Werte in Sekunden vorliegen

- Die Werte werden addiert und ausgegeben

Kann man die Funktion so schreiben oder wird das nicht funktionieren?

Muss ich auf etwas Bestimmtes achten?

Hatte mich wie gesagt mit For-Schleifen daran versucht, aber bin kläglich gescheitert..

Ich würde mich sehr über Tipps und Ratschläge freuen.. :)

Vielen Dank schon einmal im Voraus!

LG

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

#include <stdio.h>

#include <conio.h>

#include <iostream>


 using namespace std;


long SecondsSincemidnight(long hours, long minutes, long seconds);

int main()

    {

    long hours;

    long minutes;

    long seconds;

    long hours2 = 0; //Midnight

    long minutes2 = 0; //Midnight

    long seconds2 = 0; //Midnight

    long variable1;

    long sum=0;


    do{

        cout << "Stunden angeben (0-23): " << endl;

        cin >> hours;

        }while(hours>23);

    do{

        cout << "Minuten angeben (0-59): " << endl;

        cin >> minutes;

        }while(minutes>59);

    do{

        cout << "Sekunden angeben (0-59): "<< endl;

        cin >> seconds;

        }while(seconds>59);  



    variable1 = SecondsSincemidnight(hours, minutes,  seconds);

    cout << "Sekunden: " <<  variable1 << endl;


    sum= variable1;


    return  0;

    }


long SecondsSincemidnight(long a, long b, long c)

    {

    return a*3600+b*60+c;

    }

Nicht gerade elegant, aber sollte laufen.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Vielen Dank für eure Antworten!

Leider ist es uns nicht erlaubt die vorgegebenen Funktionen, Klasse, wie Split und TimeSpan etc. zu verwenden. Wir sollen die Funktionen alle selbst schreiben.

Auch deine Variante dürfen wir so leider nicht machen Polar. Wir hatten long noch nicht und die Funktion soll nur einen Parameter haben (string) und int zurück liefern.

Ich habe noch ein bisschen herumprobiert und jetzt gibt mir die Funktion zumindest die Stunden und Sekunden richtig zurück. Die Minuten unterschlägt er jedoch. Weiß jemand weshalb? Ich komm einfach nicht auf den Fehler...

Hier der Code:


    int doppelpunkt = 0;

    int erster = 0;

    int zweiter = 0;

    string stunden = "";

    string minuten = "";

    string sekunden = "";

    for (int i = 0; i<s.length(); i++)

    {

        if (s[i]==':')

        {

            doppelpunkt = doppelpunkt + 1;

            erster = i;

            if(doppelpunkt == 1)

            {

                for (int j = 0; j<erster;j++)

                {

                    stunden += s[j];

                }

            }

            else if (doppelpunkt==2)

            {

                zweiter = i;

                for (int k = erster+1;k<zweiter;k++)

                {

                    minuten += s[k];

                }

            }

        }

    }

    for (int l = zweiter+1; l<s.length(); l++)

    {

        sekunden += s[l];

    }

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Danke, das war der Fehler! :)

So diese Funktion funktioniert jetzt.

Die nächste Aufgabe war es, eine genau umgekehrte Funktion zu schreiben. Also eine Funktion, die eine Zeitspanne in Sekunden erhält und dann den String in dem Format "00:00:00" ausgibt.

Mein Code dazu sieht wie folgt aus:


int stunden = zeit/3600;

    int stundsek = stunden*3600;

    int minuten = (zeit - stundsek)/60;

    int minsek = minuten*60;

    int sekunden = (zeit-stundsek-minsek);


    string stunde = "";

    string minute = "";

    string sekunde = "";

    string uhrzeit = "";


    for (int j = 0; j<stunden; j++)

    {

        int x=stunden%10;

        stunden/=10;

        char i='0';

        i=i+x;

        stunde=i+stunde;

    }

    for (int j = 0; j<minuten; j++)

    {

        int x=minuten%10;

        minuten/=10;

        char i='0';

        i=i+x;

        minute=i+minute;

    }

    for (int j = 0; j<sekunden; j++)

    {

        int x=sekunden%10;

        stunden/=10;

        char i='0';

        i=i+x;

        sekunde=i+sekunde;

    }

Problem ist, dass es die Sekunden nicht richtig ausgibt.. Und wieder finde ich den Fehler nicht.. Stunden und Minuten funktionieren soweit aber bei den Sekunden kommt immer was total falsches heraus..

Jemand einen Tipp für mich? :)

bearbeitet von Schneeherz

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden


×