String 2 double



  • Hallo zusammen,
    die Überschrift lässt das Thema leichter erscheinen, als es leider ist.
    ich habe folgendes Problem:
    Ich würde gerne aus einen Daten-String z.B.(2006-01-05-2030), also yyyy-mm-dd-hhhh
    jeweils die Stunde und den Tag herausfiltern.
    Ansatzweise habe ich diesen Code verwendet:

    double date_as_double = atof(date.data());

    Anschließend wollte ich aus dem double date_as_double die Stunde, und den Tag ablesen (beides int)
    Bei dem oben genannten Code wird leider nach dem ersten nicht double Wert, hier also "-" abgebrochen, sodass ich lediglich "2006" unter double_date_pair gespeichert habe.
    Ich hoffe, ihr habt das Problem verstanden 😉
    Vielen Dank für die Hilfe im Voraus!


  • Administrator

    atof ist C, also besser die Finger weg davon. Zudem läufst du mit std::string::data() grosse Gefahr, da es keinen null terminierten String zurück gibt. Korrekter wäre wenn schon std::string::c_str() .

    Dein Problem lässt sich aber am einfachsten über std::istringstream lösen. Entweder nur mit ihm, oder mit Hilfe von ein paar std::string Funktionen.

    1. Möglichkeit:

    #include <sstream>
    
    int main()
    {
      int year, month, day, hour, minute;
      std::istringstream iss("2006-01-05-2030");
    
      iss >> year;
      iss.ignore();
      iss >> month;
      iss.ignore();
      iss >> day;
      iss.ignore();
      iss >> hour;
    
      minute = hour % 100;
      hour = hour / 100;
    
      return 0;
    }
    

    2. Möglichkeit:

    #include <string>
    #include <sstream>
    
    int main()
    {
      int day, hour;
      std::string date = "2006-01-05-2030";
    
      std::istringstream iss(date.substr(8, 2) + ' ' + date.substr(11, 2));
      iss >> day >> hour;
    
      return 0;
    }
    

    (Ungetestet)
    C++ Reference: http://www.cplusplus.de/reference/

    Grüssli



  • Super!
    Ich weiß zwar nicht, wie du das gemacht hast, aber die 2. Möglichkeit funktioniert auf jeden Fall.
    Herzlichen Dank!



  • c++-laie schrieb:

    Ich weiß zwar nicht, wie du das gemacht hast, [...]

    Dann lies dich noch besser ins Thema ein (z.B. beim von Dravere geposteten Link). Es hat nämlich keinen Wert, Code zu schreiben, den man nicht versteht.


  • Administrator

    Nexus schrieb:

    c++-laie schrieb:

    Ich weiß zwar nicht, wie du das gemacht hast, [...]

    Dann lies dich noch besser ins Thema ein (z.B. beim von Dravere geposteten Link). Es hat nämlich keinen Wert, Code zu schreiben, den man nicht versteht.

    Oder er könnte auch nachfragen, was er denn nicht versteht. Wir geben schliesslich gerne Auskunft.

    Grüssli



  • Dravere schrieb:

    Oder er könnte auch nachfragen, was er denn nicht versteht. Wir geben schliesslich gerne Auskunft.

    Auf mich hat er nicht den Eindruck gemacht, als wäre er an einer weiteren Diskussion interessiert. Und sich besser einzulesen ist sicher auch keine schlechte Idee... 😉

    Nichtsdestotrotz kann er natürlich fragen! 🙂


Anmelden zum Antworten