ドキュメントでこれについて何も見つけられなかったので、私はここでそれを尋ねると思いました。私は次のプログラム(C ++ 11)を持っています:
#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";
}
}
出力は次のとおりです。
''
'tag'
'tag1'
'tag2'
'tag3'
'tag4'
''
token_compress_on
このオプションはすべての空のトークンを削除すると思いました。解決策は、たとえば、を使用することboost::trim_if
です。それにもかかわらず、これがboost :: splitの望ましい動作であるかどうか、そしてなぜこれが起こっているのか疑問に思いました。
(g ++ 4.6.3、ブースト1.48)