problem mit datum



  • Hi, hoff ich bin hier im richtigen forum.
    (benutze wascana (eclipse)/ MinGW GCC unter xp)

    und folgendes problem. ich möchte ein programm schreiben das zuerst ein datum einliest (date1) dann das zweite (date2). das ganze soll in eine string variable... denn string dann "auflösen" um mit dem datum rechnen zu können. unterm strich soll das programm die zwei eingegebenen Datum vergleichen und die dif. anzeigen. die frage is mein ansatz überhaupt sinvoll bzw. wenn ja wie wird er umgesetzt oder gibts ne einfachere lösung??? späterhin soll das prog schaltjahre... berücksichtigen. *ratlosigkeit!* alles was ich fand um strings zuvergleichen oder sonstiges, greift auf etwas statisches zu.

    z.b. "hello world" darin dann die "l"s finden oder so. aber wie mach ich das bei einer variablen. (ach ja, Datumsformat TT.MM.JJJJ) punkte kann ich zum rechnen nicht gebrauchen 😞 *hilfe*

    thx schon mal

    sorry bin so aufgebrauch, sollte ^^ das zu unverständlich sein, sagts 😞



  • Kommst du den gar net zurecht?! Hast du überhaupt keinen Ahnung wie du anfangen sollst?! Arbeite dich systematisch vor!

    Guck mal, das Datum einlesen solltest du doch schon mal hinbekommen!

    cin >> ...
    

    Das in einen String zu bekommen sollte doch auf nicht das Problem sein!

    Versuch dich erstmal vorzuarbeiten und dann wenn du nicht weiterkommst zeigste uns mal den Programmcode und wir helfen dir weiter... ein bissel eigen Initiative musste schon zeigen!^^



  • Suche in Strings kannst du natürlich auch mit Variablen durchführen - und zum Zerlegen der Datumseingaben in ihre Teile suchst du einfach die enthaltenen Punkte und wandelst die Abschnitte dazwischen in Zahlen um:

    string datum;
    cin>>datum;
    int pos1 = datum.find('.'), pos2 = datum.find('.',pos1+1);
    int tag = atoi(datum.substr(0,pos1-1).c_str());
    int mon = atoi(datum.substr(pos1+1,pos2-pos1-1).c_str());
    int jhr = atoi(datum.substr(pos2+1).c_str());
    

    PS: Zum Rechnen mit Datumswerten empfehle ich die Funktionen der <ctime>



  • Ui... jetz machts doch mal nich so schwer.
    So kannste dein Datum auch einlesen. (Ist aber C, und kein C++)

    int Tag, Monat, Jahr;
    scanf("%i.%i.%i", Tag, Monat, Jahr);
    


  • danke schonmal für eure schnelle antwort.
    das hatte ich gestern abend nochgemacht. datum is also drin un wird zum überprüfen nochmal ausgegeben (eigentlich unnütz aber naja)
    werd mich dann jetzt mal am zerlegen versuchen 😞

    #include <iostream>
    #include <string>
    using namespace std;
    
    string date1;
    string date2;
    string date;
    
    int main() {
    	cout << "Bitte geben Sie hier das ERSTE Datum fuer den Vergleich an (Format TT.MM.JJJJ):" << endl; // prints Wie lange sind wir zusammen
    	cin >> date1;
    	cout << '\n';
    	cout << "Ihr erstes Datum lautet " << date1;
    	cout << '\n';
    	cout << '\n';
    	cout << '\n';
    	cout << "Bitte geben Sie hier das ZWEITE Datum fuer den Vergleich an (Format TT.MM.JJJJ):" << endl; // prints Wie lange sind wir zusammen
    	cin >> date2;
    	cout << '\n';
    	cout << "Ihr zweites Datum lautet " << date2;
    	cout << '\n';
    	return 0;
    }
    


  • wahnsin 🙂 *freu* es funktioniert. mit CStoll variante. tausend dank. werd jetzt mal nach ner erläuterung suchen (atoi(date1.substr(pos1+1,pos2-pos1-1).c_str());) was genau da passiert. den wenn ich das datum 23.01.1963 z.b eingebe wird mir nur 231963 ausgegeben!? müsst ich also etwas abändern... wenn ihr zeit und lust habt könntet ihr mir ja evtl. ne erklärung dazu posten (sollte ich nix finden).

    ihr seid hammer, thx nochmal



  • substr(x,y) gibt dir einen Teil des (C++) Strings (y Zeichen ab Index x) zurück, atoi() verarbeitet einen übergebenen (C) String zu einer Zahl. (und c_str() liefert dir die C-Repräsentation des C++ Strings, weil atoi() nur mit C-Strings arbeitet).

    (und mit den beiden find()-Anweisungen bestimmst du den Index der Punkte, die die Einzelteile trennen)


Anmelden zum Antworten