Ich verwende die boost::split
- Methode, um einen String wie folgt zu teilen:
Ich stelle zunächst sicher, dass der richtige Header angegeben wird, um Zugriff auf boost::split
Zu erhalten:
#include <boost/algorithm/string.hpp>
dann:
vector<string> strs;
boost::split(strs,line,boost::is_any_of("\t"));
und die Linie ist wie
"test test2 test3"
So verarbeite ich den Ergebnis-String-Vektor:
void printstrs(vector<string> strs)
{
for(vector<string>::iterator it = strs.begin();it!=strs.end();++it)
{
cout << *it << "-------";
}
cout << endl;
}
Aber warum in dem Ergebnis strs
ich nur "test2"
Und "test3"
Erhalte, sollte nicht "test"
, "test2"
Und "test3"
gibt es \t
(tab) in der Zeichenfolge.
Aktualisiert am 24. April 2011: Nachdem ich eine Codezeile bei printstrs
geändert hatte, konnte ich die erste Zeichenfolge sehen. ich habe mich verändert
cout << *it << "-------";
zu
cout << *it << endl;
Und es schien, dass "-------"
Die erste Zeichenfolge irgendwie verdeckte.
Das Problem liegt an einer anderen Stelle in Ihrem Code, da dies funktioniert:
string line("test\ttest2\ttest3");
vector<string> strs;
boost::split(strs,line,boost::is_any_of("\t"));
cout << "* size of the vector: " << strs.size() << endl;
for (size_t i = 0; i < strs.size(); i++)
cout << strs[i] << endl;
und Testen Ihres Ansatzes, der einen Vektoriterator verwendet, funktioniert auch:
string line("test\ttest2\ttest3");
vector<string> strs;
boost::split(strs,line,boost::is_any_of("\t"));
cout << "* size of the vector: " << strs.size() << endl;
for (vector<string>::iterator it = strs.begin(); it != strs.end(); ++it)
{
cout << *it << endl;
}
Wieder ist dein Problem woanders. Vielleicht ist das, was du denkst, ein \t
Zeichen in der Zeichenfolge, nicht. Ich würde den Code mit Debugs füllen, indem ich die Einfügungen auf dem Vektor überprüfe, um sicherzustellen, dass alles so eingefügt wird, wie es sein soll.
Ausgabe:
* size of the vector: 3
test
test2
test3
Ich vermute, warum Sie Probleme mit der Deckung Ihres ersten Ergebnisses hatten, dass Sie tatsächlich die Eingabezeile aus einer Datei gelesen haben. Diese Zeile hatte wahrscheinlich ein\r am Ende, so dass Sie mit so etwas endeten:
-----------test2-------test3
Was passiert ist, ist das Gerät tatsächlich gedruckt:
test-------test2-------test3\r-------
Das bedeutet, dass aufgrund des Wagenrücklaufs am Ende von test3 die Bindestriche nach test3 über dem ersten Wort gedruckt wurden (und einige der vorhandenen Bindestriche zwischen test und test2, aber Sie würden das nicht bemerken, weil sie es waren schon Striche).