我有一个这样的字符串:
std::string input("I #am going to# learn how #to use #boost# library#");
我这样做:
std::vector<std::string> splitVector;
boost::split(splitVector, input, boost::is_any_of("#"));
得到了这个:(splitVector)
splitVector:
"I "
"am going to"
" learn how "
"to use "
"boos"
" library"
"" // **That's odd, why do I have an empty string here ?**
但是需要这样的东西:
splitVector:
"I "
"#am going to"
"# learn how "
"#to use "
"#boost"
"# library"
"#"
怎么做?或者也许在boost库中有另一种方法可以做到这一点?
为什么我在splitVector
中得到一个空字符串?
答案 0 :(得分:5)
您无法使用boost::split
,因为使用来自split_iterator
的{{1}}的内部实施会吞下令牌。
但是你可以使用boost/algorithm/string/find_iterator.hpp
,因为它可以选择保留分隔符:
每当输入序列中出现分隔符时,当前令牌就会完成,并开始新的令牌。 dropped_delims中的分隔符不会在输出中显示为令牌,而keep_delims中的分隔符确实显示为令牌。
http://www.boost.org/doc/libs/1_55_0/libs/tokenizer/char_separator.htm
<强> See next live: 强>
boost::tokenizer