diesen Code Gegeben:Warum ist string :: substr schlecht?
auto str = "a,b,c"s;
vector<string> tokens;
string::size_type start = -1;
string::size_type finish = str.find(',');
do {
tokens.push_back(str.substr(start + 1, finish));
start = finish;
finish = str.find(',', start + 1);
} while (start != string::npos);
Ich würde tokens
erwarten enthalten:
- "a"
- "b"
- "c"
Wenn ich laufen der Code jedoch bekomme ich:
- "a"
- "b, c"
- "c"
Ich habe in diesem anschaulichen Beispiel Debug-Informationen ausgedruckt: http://ideone.com/fx3uC9
Ist das ein Fehler? Ich sehe es in gcc und Visual Studio, also scheint es, als hätte ich etwas falsch gemacht.
Dies ist, was ein Debugger ist. Dies ist ein sehr kurzer, einfacher, trivialer Algorithmus. Verwenden Sie Ihren Debugger, um den Code Zeile für Zeile durch die Schleife zu durchlaufen. Untersuchen Sie die Werte all dieser Variablen. Sehen Sie, worauf sie hinweisen. Lesen Sie die Beschreibung der 'std :: string' Methoden und was jeder Parameter sein sollte. Finde es heraus. Zu wissen, wie man einen Debugger benutzt, ist eine notwendige Fähigkeit für jeden C++ Entwickler. –
Das zweite Argument für 'substr()' ist eine * Länge *, kein Index. –
Mögliches Duplikat einer Frage, die in einer vergangenen Zeit gestellt wurde, als Fragen auf den neuesten Stand gebracht wurden: http://stackoverflow.com/q/12827030/2642059 –