2017-04-15 2 views
0

Ich schreibe etwas Code, um einige Parameterwerte aus einer Datei zu lesen.Korrekte Verwendung von Operator >> Folgezeiten bei gleichem Eingangsstrom

Ich weiß, dass, wenn, sagen wir, ich habe ein stringstream Objekt stream aus der Zeichenfolge erstellt "10" ich eine numerische Variable als int var1; nur durch die Eingabe definiert initialisieren können:

stream >> var1; 

Was, wenn nun mein stringstream Objekt erstellt aus dem String "10;3;4.5;3.2;" und ich habe vier Variablen wie folgt deklariert:

int var1; 
int var2; 
double var3; 
double var4; 

Kann ich so etwas schreiben:

stream >> var1; 
stream >> var2; 
stream >> var3; 
stream >> var4; 

um alle vier Variablen aus diesem Stream zu initialisieren? Oder meine einzige Option besteht darin, einen einfachen Parser zu implementieren, um jeden Wert einzeln zu extrahieren und diesen Wert dann in jedem einzelnen zu speichern?

Nun, in der Tat habe ich es versucht und es funktioniert nicht. var1 wird korrekt initialisiert, aber die anderen Variablen sind alle auf 0 initialisiert.

Können Sie erklären, warum das nicht funktioniert? Vielen Dank im Voraus für Ihre Hilfe.

+0

Sorry, ich weiß nicht, die Ströme gut genug, um eine Erklärung zu geben, aber vielleicht die Antwort auf diese Frage (erklären; als Leerzeichen) hilft als Alternative zum Schreiben Ihres eigenen Parsers: http://stackoverflow.com/questions/21764826/skipping-expected-characters-like-scanf-with-cin – mars

+0

Erklärt nicht, warum das scheitert, aber zeigt Ihnen, wie Sie können TU es. Ersetzen Sie einfach ',' mit ';', da Sie semi-serated Daten und keine durch Komma getrennten Daten haben. http://stackoverflow.com/questions/1120140/how-can-i-read-and-parse-csv-files-in-c – NathanOliver

Antwort

1

Arbeiten mit Streams ist ein bisschen schwierig, aber auch interessant zugleich. Um dies mit Stringstreams zu analysieren, ändern Sie einfach den Code etwas, um das Semikolon zu berücksichtigen. Hier ist wie:

// stream = "10;3;4.5;3.2;" 
stream >> var1; 
// stream = ";3;4.5;3.2;" 
// now if you will input stream >> var2, 
// will extract till the next integer value exists. 
// But here, since character ';' and not an integer, it won't pass any value to var2. 
// To correct it, add this line to take are of the ';' : 
char ch; 
stream >> ch; 
stream >> var2 >> ch; 
stream >> var3 >> ch; 
stream >> var4; 

Um dies zu verstehen, müssen Sie verstehen, wie der Stream Eingang aus dem Eingabepuffer extrahiert. Ich habe versucht, es Schritt für Schritt zu erklären.

Für ein besseres Verständnis zu diesem Thema beziehen sich auf diese: http://www.learncpp.com/cpp-tutorial/184-stream-classes-for-strings/