Schneeherz Geschrieben 17. April 2015 Teilen Geschrieben 17. April 2015 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 17. April 2015 Teilen Geschrieben 17. April 2015 Schau dir mal die Split Methode an. Oder wenn du es gabz einfach halten willst lass die Ganze Arbeit von der TimeSpan Klasse erledigrn Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Polar Geschrieben 17. April 2015 Teilen Geschrieben 17. April 2015 #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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schneeherz Geschrieben 17. April 2015 Autor Teilen Geschrieben 17. April 2015 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]; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 17. April 2015 Teilen Geschrieben 17. April 2015 Debug den Code doch einfach mal und schau was genau schritt für schritt passiert Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 17. April 2015 Teilen Geschrieben 17. April 2015 Du setzt erster bei jedem gefundenen Doppelpunkt auf i. Das darfst du natürlich nur beim ersten machen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schneeherz Geschrieben 17. April 2015 Autor Teilen Geschrieben 17. April 2015 (bearbeitet) 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 17. April 2015 von Schneeherz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 17. April 2015 Teilen Geschrieben 17. April 2015 Ich wiederhole mal meinen Tipp von oben. Hast du es mal debuggt? Damit finden sich solche Logikfehler immer schnell. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.