split Funktion funktioniert nicht
-
#include <iostream> #include <string> void split(const std::string& str) { std::string::size_type oldidx = 0, newidx; while((newidx = str.find('|', oldidx)) != std::string::npos) { std::cout << str.substr(oldidx, newidx) << std::endl; oldidx = newidx + 1; } } int main() { std::string s = "Test|egal|nichts"; split(s); }
Hi. Das ist mein Versuch für eine Split-Funktion. Leider wird
Test
egal|nichausgegeben. Was mach ich falsch??
Kann man die noch verbessern oder ist sie total falsch?
-
Das letzte Stück fehlt noch. Wenn newidx == string::npos, bricht zwar die Schleife ab, aber du mußt noch den Rest ausgeben.
Ach ja, und es muß str.substr(oldidx, newidx**-oldidx**) heißen, da der zweite Parameter die Länge und die Endposition des Substrings angibt.
-
Ah vielen vielen Dank. Das mit dem substr war mein Hauptproblem.
Ich komme von Java und da war die Methode so:substring(int beginIndex, int endIndex)
Hatte nicht damit gerechnet das das in C++ anders gemacht wird.
Nochmal die korrigierte Variante, falls es jemand noch brauchen sollte.
void split(const std::string& str) { std::string::size_type oldidx = 0, newidx; while((newidx = str.find('|', oldidx)) != std::string::npos) { std::cout << str.substr(oldidx, newidx - oldidx) << std::endl; oldidx = newidx + 1; } std::cout << str.substr(oldidx) << std::endl; }
-
Das Witzige ist, daß ich wenige Stunden vor deinem Post was erstaunlich Ähnliches geschrieben habe, allerdings schon daheim war und deshalb nicht direkt den Code posten konnte.
vector<int> splitString(const string &to_split, char splitter) { size_t beg = 0, end; stringstream sstr; int num; vector<int> v; while ((end = to_split.find(splitter, beg)) != string::npos) { sstr << to_split.substr(beg, end - beg); sstr >> num; sstr.clear(); v.push_back(num); beg = end + 1; } sstr << to_split.substr(beg); sstr >> num; v.push_back(num); return v; }