4

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

xxx,xxx,xxxxxxx,,xxxxxx,xxxx

现在我正在使用以下代码

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

现在,一旦找到“,”而不是“,”,提升就会拆分字符串,这是我不想要的。有什么方法可以明确指定它只在找到“,”而不是“,”时才拆分

4

4 回答 4

6

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

您正在寻找的是沿线

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

备查..

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

eCompress

如果 eCompress 参数设置为 token_compress_on,则将相邻的分隔符合并在一起。否则,每两个分隔符分隔一个标记。

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

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

这是文档。

于 2014-04-18T04:27:01.223 回答
0

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

编辑:出于好奇,我自己去查看 API,不幸的是我找不到你想要的现成谓词。最坏的情况是你必须自己写。

于 2013-04-01T17:25:52.927 回答
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 回答