【问题标题】:boost string split to eliminate spaces in words提升字符串拆分以消除单词中的空格
【发布时间】:2012-05-20 00:52:25
【问题描述】:

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

#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

【问题讨论】:

    标签: c++ string boost split


    【解决方案1】:

    您需要根据documentation 添加一个值为boost::token_compress_on 的最终参数:

    boost::algorithm::split(strVec,str,is_any_of("\t "),boost::token_compress_on); 
    

    【讨论】:

      【解决方案2】:

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

      要获得您期望的输出,您需要指定可选的eCompress 参数,其值为token_compress_on

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

      【讨论】: