StringStream: Format übertragen
-
Hallo Community,
ich habe gestern nach einer C++-Alternative für "sscanf" gesucht und bin bei Stringstreams hängen geblieben.
Mein Problem:
Ich habe einen String vom Format "String Zahl Zahl Zahl".
Nun möchte ich die drei Zahlen übertragen und den anfänglichen String einfach ignorieren.Mein bisheriger Ansatz sieht wie folgt aus:
stringstream hLine("asdf 1 2 3"); int a = 0; int b = 0; int c = 0; hLine >> a >> b >> c;Jedoch klappt das nur wenn der anfänglich Text nicht dort ist.
Meine Frage:
Wie kann ich den anfänglichen Teil ignorieren?Ich hoffe mal ich habe keinen blöden Denkfehler oder habe einen anderen Artikel zu dem Thema übersehen.
Mit freundlichen Grüßen,
Atgoogat
-
Atgoogat schrieb:
Hallo Community,
ich habe gestern nach einer C++-Alternative für "sscanf" gesucht und bin bei Stringstreams hängen geblieben.
stringstream hLine("asdf 1 2 3"); string dummy; int a = 0; int b = 0; int c = 0; hLine >> dummy >> a >> b >> c;t
-
Welches Format hat String? Wenn es keinen Leerraum beinhaltet:
while (hLine && not std::isspace((unsigned char)hLine.get()));Edit: War wohl doch ein wenig komplizierter als gedacht...

-
Danke für die schnellen Antworten!
Belli: Deine Möglichkeit funktioniert aber irgendwie wirkt das ein wenig wie nicht so geplannt. Gibt es dafür keine Platzhalter oder ähnliches? Trotzdem danke sehr!
Arcoth: 'String' hat keinen Leerraum also wäre das eine Option jedoch würde ich dann eher mit der Lösung von Belli fahren da diese einfach zu Händeln ist.
-
Hallo Atgoogat,
falls sicher ist, dass es sich bei dem Zeichen vor der Zahl um ein Leerzeichen handelt, kann man auch alles bis dorthin überlesen:#include <iostream> #include <sstream> int main() { using namespace std; stringstream hLine("asdf 1 2 3"); int a, b, c; if( hLine.ignore( 9999, ' ' ) >> a >> b >> c ) cout << "Gelesen: a=" << a << " b=" << b << " c=" << c << endl; }Gruß
Werner
-
Klasse!
Ja es ist immer ein Leerzeichen dort also werde ich jetzt diese Lösung verwenden.
Vielen Dank für alle Antworten!