Poiché non ho trovato nulla su questo nello documentation, ho pensato di chiederlo qui. Ho il seguente programma (C++ 11):boost :: split lascia i token vuoti all'inizio e alla fine della stringa - è questo comportamento desiderato?
#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";
}
}
Il risultato è:
''
'tag'
'tag1'
'tag2'
'tag3'
'tag4'
''
avrei pensato che l'opzione token_compress_on
rimuove tutti i gettoni vuote. La soluzione è, ad esempio, per utilizzare boost::trim_if
. Tuttavia mi stavo chiedendo se questo è il comportamento desiderato di boost :: split, e perché questo sta accadendo?
(g ++ 4.6.3, incrementare 1.48)
Forse non ottengo il punto, ma come posso ricreare "#tag # tag1 # tag2 # tag3 #### Tag4" dai gettoni " "," tag "," tag1 "," tag2 "," tag3 "," tag4 "," "? – fdlm
@fdlm Sarebbe specifico per il formato della stringa. Il comportamento di 'boost :: split' è piuttosto generico, ma per alcuni utenti potrebbero essere interessati a preservare i caratteri finali/iniziali che verrebbero altrimenti rimossi dividendoli. Fondamentalmente se ti servono quei personaggi, devi essere esplicito e comporre insieme le funzioni che fanno ciò che ti aspetti. – birryree
Ok, ho capito. Grazie per averlo indicato. – fdlm