我编写了这段代码,将包含许多空格和/或制表符的字符串拆分为一个只包含单词的字符串向量。
#include<iostream>
#include<vector>
#include<boost/algorithm/string/split.hpp>
#include<boost/algorithm/string.hpp>
int main()
{
using namespace std;
string str("cONtainS SoMe CApiTaL WORDS");
vector<string> strVec;
using boost::is_any_of;
boost::algorithm::split(strVec, str, is_any_of("\t "));
vector<string>::iterator i ;
for(i = strVec.begin() ; i != strVec.end(); i++)
cout<<*i<<endl;
return 0;
}
我期待输出
cONtainS
SoMe
CApiTaL
WORDS
但是我在输出中用空格作为strVec中的一个元素,即
cONtainS
SoMe
CApiTaL
WORDS
答案 0 :(得分:35)
根据documentation,您需要添加值为boost::token_compress_on
的最终参数:
boost::algorithm::split(strVec,str,is_any_of("\t "),boost::token_compress_on);
答案 1 :(得分:4)
这是因为您的输入包含连续的分隔符。默认情况下,split
将其解释为表示它们之间有空字符串。
要获得预期的输出,您需要指定可选的eCompress
参数,其值为token_compress_on
。
http://www.boost.org/doc/libs/1_43_0/doc/html/boost/algorithm/split_id667600.html