split
-
ok, man muss nach "\\t" splitten.
dann kommt die meldung:
"exception der klasse std::out_of_range"
-
vector<string> Split(string data, string delimeter, int count) {
Da ist noch ein Schreibfehler: Es sollte vermutlich delhimeter heissen.
Das sind nämlich die Meter in Indien...
Simon
-
Zum eigentlichen Problem:
Das lässt sich ganz bestimmt schnell lösen, wenn Du den Debugger benutzt.
Simon
-
ja habe ich schon, allerdings kapiere ich nicht, warum im 2. durchlauf der schleife ein -1 als wert herauskommt bei der pos variable.
-
Dann lies mal bei der Doku von std::string::find(..) nach.
Ich erspare dir mal das suchen:
http://www.cplusplus.com/reference/string/string/find.html
Simon
-
na ich weiß jetzt nicht genau, aber das könnte eine lösung sein:
for(int i = 0, pos = 0; i <= count; i++) { pos = data.find(delimeter); if(pos < 0) { arg.push_back(""); } else { arg.push_back(data.substr(0, pos)); data = data.substr(pos+delimeter.length(), data.length()); } }oder was meint ihr dazu?
-
ne, geht leider auch nicht.
-
nee, echt?
-
simon.gysi schrieb:
nee, echt?
ja dann nenn mir mal deine lösung, bitte.
ich komme icht drauf.
-
2 Funktionen und du kannst jetzt selbst rausfinden, was anderst ist und wie sie funktionierne.
std::vector<std::string> split (std::string data, char del) { std::replace (data.begin(),data.end(),del,' '); std::stringstream s (data); std::string word; std::vector<std::string> v; while(s >> word) v.push_back (word); return v; } std::vector<std::string> split2 (std::string data, char del) { std::vector<std::string> v; std::string::iterator it = std::find (data.begin (), data.end (), del); std::string::iterator last = data.begin (); while(it != data.end ()) { std::string name = std::string (last,it); v.push_back (name); last = ++it; it = std::find (it, data.end(), del); } return v; }