10

我已经编写了这段代码来将包含带有许多空格和/或制表符的单词的字符串拆分为仅包含单词的字符串向量。

#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
4

2 回答 2

39

boost::token_compress_on您需要根据文档添加带有值的最终参数:

boost::algorithm::split(strVec,str,is_any_of("\t "),boost::token_compress_on); 
于 2012-05-11T12:17:47.397 回答
4

这是因为您的输入包含连续的分隔符。默认情况下split,这意味着它们之间有空字符串。

要获得您期望的输出,您需要eCompress使用 value 指定可选参数token_compress_on

http://www.boost.org/doc/libs/1_43_0/doc/html/boost/algorithm/split_id667600.html

于 2012-05-11T12:17:55.460 回答