fdl*_*dlm 10 c++ boost split c++11
由于我在文档中找不到任何内容,我想我在这里问.我有以下程序(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";
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
''
'tag'
'tag1'
'tag2'
'tag3'
'tag4'
''
Run Code Online (Sandbox Code Playgroud)
我原以为该token_compress_on选项会删除所有空标记.例如,解决方案是使用boost::trim_if.不过我想知道这是否是boost :: split的理想行为,以及为什么会这样?
(g ++ 4.6.3,提升1.48)
该行为是有意的,因为您可以从拆分版本重新创建字符串(包括起始和尾随空格).Boost不知道这个空格是否对你很重要(例如,某些文件格式可能会强制导致空格/特定空间计数).
如果您确实需要删除前导/尾随空格,您应该trim_if或trim像您一样.