Wie extrahiere ich integer aus einem string "foo0_3.txt"



  • Ich hab ein Problem, dass ich einen String habe, der eine beliebige Anzahl an character hat, gefolgt von einer n stelligen Zahl, gefolgt von einem unterstrich und wieder einer n stelligen Zahl und schließlich eine Extension.

    Ich habe es mit sscanf versucht, aber das fehlende whitespace zwischen foo und der 0 scheint ein Problem zu sein.

    Gibts da etwas in std C++? Kann Stringstream da helfen?

    Ich würde sehr ungerne selber nen automaten bauen müssen und das manuell parsen.



  • #include <string>
    #include <iostream>
    
    int main() {
    	std::string Text = "lkasdflk90812_273737373mmmm";
    	size_t Pos = Text.find_first_of( "0123456789" );
    	int Number1 = atoi( Text.c_str()+Pos );
    	Pos = Text.find( '_', Pos );
    	int Number2 = atoi( Text.c_str()+Pos+1 );
    	std::cout << Number1 << " " << Number2 << std::endl;
    }
    

    Pos noch jeweils auf std::string::npos überprüfen, falls der Text doch ein falsches Format haben sollte.



  • Es gibt bestimmt was im std oder boost, aber wie soll denn dein Ergebnis aussehen? Mach mal ein Beispiel deines Strings und des erwünschten Ergebnisses.


  • Mod

    1. Möglichkeit (elegant): Reguläre Ausdrücke benutzen, entweder mit einem Compiler der das schon kann oder portabel mit boost::regex
    2. Möglichkeit (schnell): Lass dich hiervon inspirieren:
    http://www.c-plusplus.net/forum/279893



  • Hallo danke für die schnellen Antworten.
    dfdfgdfgdfg hatte ne prima Lösung.
    Mit boost, dessen string oder dessen regex wäre es kein Problem gewesen, aber so klappt es. Danke

    P.S: Was ich benötige sind die einzelnen Tokens foo, 0, 3 und .txt, was so ziemlich gut klappt


Anmelden zum Antworten