Da ich nichts dazu in der documentation finden konnte, dachte ich, ich frage es hier. Ich habe das folgende Programm (C++ 11):boost :: split lässt leere Token am Anfang und am Ende der Zeichenfolge - ist dies das gewünschte Verhalten?
#include <iostream>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
int main() {
string tmp = " #tag #tag1#tag2 #tag3 ####tag4 ";
list<iterator_range<string::iterator> > matches;
split(matches, tmp, is_any_of("\t #"), token_compress_on);
for(auto match: matches) {
cout << "'" << match << "'\n";
}
}
Die Ausgabe lautet:
''
'tag'
'tag1'
'tag2'
'tag3'
'tag4'
''
Ich hätte gedacht, dass die token_compress_on
Option alle leeren Token entfernt. Die Lösung ist beispielsweise boost::trim_if
zu verwenden. Trotzdem habe ich mich gefragt, ob dies das gewünschte Verhalten von boost :: split ist und warum dies passiert?
(g ++ 4.6.3, steigern 1,48)
Vielleicht den Punkt, den ich nicht bekommen Python, aber wie kann ich "#tag # tag1 # tag2 # tag3 #### tag4" von den Token "neu "," tag "," tag1 "," tag2 "," tag3 "," tag4 "," "? – fdlm
@fdlm Das wäre spezifisch für das Format Ihrer Zeichenfolge. Das Verhalten von 'boost :: split' ist ziemlich allgemein, aber für einige Benutzer mag es wichtig sein, nachlaufende/führende Zeichen zu behalten, die ansonsten durch Teilen auf ihnen entfernt würden. Wenn Sie diese Zeichen brauchen, müssen Sie explizit sein und Funktionen zusammenstellen, die das tun, was Sie erwarten. – birryree
Ok, ich habe es. Vielen Dank, dass Sie darauf hingewiesen haben. – fdlm