4

I currently have a string that has the following structure

xxx,xxx,xxxxxxx,,xxxxxx,xxxx

Now I am using the following code

 std::vector< std::string > vct;
 boost::split( vct, str, boost::is_any_of(",,") );

Now the boost splits up the string once it finds "," and not ",," which I dont want. Is there any way that I could explicitly specify that it should split only if it finds ",," and not ","

4

4 に答える 4

6

is_any_of(",,")リストで指定されたものすべてに一致します。この場合、,または,

あなたが探しているのは、

boost::algorithm::split_regex( vct, str, regex( ",," ) ) ;
于 2013-04-01T17:28:05.007 に答える
3

今後の参考のために..

boost::split は、eCompress隣接するセパレーターを単一のセパレーターとして扱うことができる 4 番目のパラメーターを取ります。

e圧縮

eCompress 引数が token_compress_on に設定されている場合、隣接するセパレーターは一緒にマージされます。それ以外の場合、2 つのセパレーターごとにトークンが区切られます。

パラメータを指定するだけです。,次のように、2 番目もスキップできます。

boost::split( vct, str, boost::is_any_of(","),
              boost::algorithm::token_compress_on)

これがドキュメントです。

于 2014-04-18T04:27:01.223 に答える
0
#include <functional>
#include <boost/algorithm/string/compare.hpp>
...

std::vector< std::string > vct;
//boost::split( vct, str, [](const auto& arg) { return arg == str::string(",,"); } );
boost::split( vct, str, std::bind2nd(boost::is_equal, std::string(",,")) );
于 2013-04-01T17:35:37.377 に答える
0

Is_any_of は、文字列内の任意の文字で分割されます。それはあなたが望むことをしません。別の述語については、ブーストのマニュアルを参照する必要があります。

編集: 好奇心から API を自分で調べてみましたが、残念ながら、あなたが望むものの準備が整った述語を見つけることができませんでした。最悪の場合、自分で書かなければなりません。

于 2013-04-01T17:25:52.927 に答える