Zum Inhalt springen

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


Schneeherz

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

Link zu diesem Kommentar
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.

Link zu diesem Kommentar
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];

    }

Link zu diesem Kommentar
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
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...