Stringstream auf vector<int>
Frage ich mich, was der beste Weg zu schreiben von einem std::stringstream
in eine vector<int>
.
Hier ein Beispiel von dem, was in der stringstream
:
"31 #00 532 53 803 33 534 23 37"
Hier ist was ich habe:
int buffer = 0;
vector<int> analogueReadings;
stringstream output;
while(output >> buffer)
analogueReadings.push_back(buffer);
Jedoch, was zu geschehen scheint ist, liest es die erste Sache ist, dann wird es #00
und zurück 0
weil es keine Zahl.
Im Idealfall, was ich will, ist, es zu einem #
und dann einfach überspringt alle Zeichen bis zum nächsten whitespace-Zeichen. Ist das möglich mit Flaggen oder so?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie prüfen, wenn Sie haben eine Zahl ist oder nicht. verwenden Sie die Antwort von hier:
Wie Sie feststellen, ob ein string eine Zahl mit C++?
das Ergebnis ist 31 532 99 53 803 33 534 23 37
Auch, wichtig Nachteile der Verwendung von lexikalischen Besetzungen, wie dies hier beschrieben wird:
Wie wertet einen string mit einem int-Datentyp in C++? , wo eine alternative zu
tringstream(tmpbuff)>>num
gegeben ist.Beispielsweise 04hello wird 4 und 7.4e55 wird 7. Es gibt auch schreckliche Probleme mit Unterlauf-und Unterlauf. Die saubere Lösung von André Caron wandelt
in
auf meinem system. Beachten Sie, dass auch die 77 fehlt!
output >> buffer
Ausdruck mitbuffer
Typint
bereits tests, um zu sehen, wenn Ihr eine Zahl. Der trick ist, dass OP-Schleife Bedingung test mehrdeutig ist: es unterscheidet nicht zwischen dem end-of-stream und ein Fehler beim Lesen einer Zahl.Ohne loops version:
Ich denke, die beste Methode wäre, um