Ich habe die folgende Zeichenfolge:Split eine Reihe von positiven/negativen ganzen Zahlen von Raum
1 -2 -8 4 51
Ich mag einen Vektor mit 5 Elementen bekommen, jeder von ihnen auf die 5 Zahlen in der Zeichenfolge entspricht. Grundsätzlich möchte ich die obige Zeichenfolge als Trennzeichen nach Leerzeichen aufteilen.
Ich habe eine Menge Fragen wie diese auf Stack Overflow gefunden, aber bisher kann keiner von ihnen die erste "1" oder die letzte (von 51
) bekommen. Mein Code ist folgende:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;
std::vector<std::string> split(std::string str)
{
std::string buf;
std::stringstream ss(str);
vector<std::string> tokens;
while (ss >> buf)
tokens.push_back(buf);
return tokens;
}
int main()
{
std::string temps = "1 -2 -8 4 51";
std::vector<std::string> x = split(temps);
for (int j = 0; j < x.size(); j++){
cout << x[j] << endl;
}
}
Meine Ausgabe ist die folgende:
-2
-8
4
5
Wie Sie das erste und das letzte 1 sehen können, werden übersprungen. Ich bin sehr neu in C++ (ich war vielleicht zu sehr an die integrierten Funktionen .split()
anderer Sprachen gewöhnt), aber ich kann nichts falsches auf meinem obigen Code sehen. Kann mir bitte jemand helfen, zu verstehen, was ich falsch mache?
err funktioniert gut hier. Ich erhalte '1 -2 -8 51' wie erwartet ... –
[Nicht reproduzierbar] (http://coliru.stacked-crooked.com/a/cffe001aedf4e0ee) – NathanOliver
Was ist Ihr Compiler? Funktioniert gut auf gcc: http://melpon.org/wandbox/permlink/RZOT5kbvHvPraz5b – krzaq