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; }Posnoch 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.
-
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. DankeP.S: Was ich benötige sind die einzelnen Tokens foo, 0, 3 und .txt, was so ziemlich gut klappt