使用boost :: is_any_of将分割混淆为分隔符“,,”和“,”

时间:2013-04-01 17:13:44

标签: c++ boost

我目前有一个具有以下结构的字符串

xxx,xxx,xxxxxxx,,xxxxxx,xxxx

现在我使用以下代码

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

现在,一旦找到“,”并且不是“我”不想要的话,提升就会分裂字符串。有没有什么办法可以明确指出它只有在找到“,,”而不是“,”

时才能拆分

4 个答案:

答案 0 :(得分:6)

is_any_of(",,")将匹配列表中指定的任何内容。在这种情况下,,,

您正在寻找的是

boost::algorithm::split_regex( vct, str, regex( ",," ) ) ;

答案 1 :(得分:3)

供将来参考..

boost :: split采用第4个参数eCompress,可以让您将相邻的分隔符视为单个分隔符:

  

<强> eCompress

     

如果eCompress参数设置为token_compress_on,则相邻   分隔符合并在一起。否则,每两个分隔符   划分令牌。

您所要做的就是指定参数。您也可以跳过第二个,,因为:

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

Here's the documentation.

答案 2 :(得分:0)

Is_any_of拆分字符串中的任何字符。它不会做你想要的。您需要查看另一个谓词的加速手册。

编辑:出于好奇,我自己去查看API,但是我无法找到你想要的准备好的谓词。最糟糕的情况是你自己写它。

答案 3 :(得分: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(",,")) );