string an Punkt(.) zerlegen?



  • Hallo!

    Wie kann ich einen String ohne Zuhilfenahme spezieller Bibliotheken außer string, sstream & iostream so zerlegen, dass ich aus einem String "11.11.2058" die drei Zahlen 11, 11 und 2058 erhalte?
    Gibt es noch einen anderen Weg, als den String in ein Array aus Chars umzuwandeln und dann "händisch" darin zu suchen?

    Grüße, pktm



  • pktm schrieb:

    Wie kann ich einen String ohne Zuhilfenahme spezieller Bibliotheken außer string, sstream & iostream so zerlegen, dass ich aus einem String "11.11.2058" die drei Zahlen 11, 11 und 2058 erhalte?

    Hallo pktm,

    Du benötigst keine 'speziellen Bibliotheken'; das was der C++-Standard zur Verfügung stellt, reicht völlig aus

    #include <iostream>
    #include <sstream>
    
    int main()
    {   
        std::string einstring = "11.11.2058";
        char punkt;
        int tag, monat, jahr;
        std::istringstream in( einstring );
        if( in >> tag >> punkt >> monat >> punkt >> jahr )
        {
            std::cout << "Beginn der Narrenzeit im Jahre " << jahr << " ist der " << tag << "." << monat << std::endl;
        }
        return 0;
    }
    

    Gruß
    Werner



  • Werner Salomon schrieb:

    char punkt;
    

    Ich bin mir zwar nicht sicher, aber müsste punkt nicht initialisiert werden? Woher soll der Stream sonst wissen, welches Zeichen ein Punkt ist?

    (Allerdings muss ich sagen, ich verstehe das mit der If-Abfrage selber nicht ganz, da ich mich mit Streams nicht so auskenne ;))



  • Er liest einfach nur ein Zeichen des Typs char ein, und speichert es in der Variable Punkt.

    Das Trennzeichen könnte auch a,b,c oder sonstwas sein.



  • Ok, hab es falsch verstanden. Ich dachte, das ginge nicht weil ja die Zahlen mehrstellig sind, aber da diese ja Integers und nicht Chars sind, ist alles klar...
    Sorry für meinen Beitrag 🙂



  • Nexus schrieb:

    Werner Salomon schrieb:

    char punkt;
    

    Ich bin mir zwar nicht sicher, aber müsste punkt nicht initialisiert werden? Woher soll der Stream sonst wissen, welches Zeichen ein Punkt ist?

    nun - der stream weiß es nicht, wie The-Kenny schon erklärt hat. Korrekter wäre hier auch der Gebrauch des 'trenner<>'-Manipulators aus diesem Beitrag hier.

    Gruß
    Werner



  • Cool, danke! 🙂


Log in to reply