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値を指定してオプションのパラメーターを指定する必要があります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 に答える