C++ Boost::使用整个字符串作为分隔符进行拆分

C++ Boost::使用整个字符串作为分隔符进行拆分,c++,string,boost,tokenize,C++,String,Boost,Tokenize,我想知道是否有一种方法使用boost::split来分割字符串,使用整个字符串作为分隔符。例如: str = "xxaxxxxabcxxxxbxxxcxxx" 是否有一种方法可以使用“abc”作为分隔符拆分此字符串?因此,返回: 结果将是字符串“xxaxxxx”和“xxxxxbxxxcxxx” 我知道boost::split使用“is_any_of”谓词,但是调用is_any_of(“abc”)也会导致在单个字符“a”、“b”和“c”处拆分字符串,这不是我想要的。是的,有一种方法(这是我知道的

我想知道是否有一种方法使用boost::split来分割字符串,使用整个字符串作为分隔符。例如:

str = "xxaxxxxabcxxxxbxxxcxxx"
是否有一种方法可以使用
“abc”
作为分隔符拆分此字符串?因此,返回:

结果将是字符串
“xxaxxxx”
“xxxxxbxxxcxxx”

我知道
boost::split
使用
“is_any_of”
谓词,但是调用
is_any_of(“abc”)
也会导致在单个字符“a”、“b”和“c”处拆分字符串,这不是我想要的。

是的,有一种方法(这是我知道的一种方法,也许有更好的方法)使用
boost::algorithm::split_regex
拆分分隔符为正则表达式的字符序列

例如:

vector< string > result;
boost::algorithm::split_regex( result, str, regex( "^((?!abc)*abc(?!abc)*)*$" ) ) ;
copy( result.begin(), result.end(), ostream_iterator<string>( cout, "\n" ) ) ;
vector结果;
boost::algorithm::split_regex(result,str,regex(^((!abc)*abc(?!abc)*)*$);
复制(result.begin()、result.end()、ostream_迭代器(cout,“\n”);

split_regex
如@Mythli所建议的那样很好。如果不想处理正则表达式,可以使用
ifind\u all
algo,如下所示。您将收到所有出现的分隔符的
迭代器\u范围
(开始/结束)。您的令牌位于它们之间(以及字符串的开头和结尾)

如果您知道输入字符串由哪些字符组成(例如,一个简单的英语句子,只包含EN个字符),您可以用特殊的分隔符包围您的单词分隔符,用它替换单词分隔符的所有外观,并用特殊的分隔符拆分

例如,我在这里使用了“%”:

std::vector<std::string> sentence_parts;
boost::replace_all(sentence, word, "%" + word_delimiter + "%");
boost::split(sentence_parts, sentence, boost::is_any_of("%"));
std::向量句;
boost::全部替换(句子,单词,“%”+单词分隔符+“%”);
boost::split(句子的各个部分,句子,boost::是(“%”)的任意部分);

您需要确保输入字符串中永远不会有特殊符号,否则它将无法正常工作

您应该能够使用
equals
和要用作分隔符的字符串值的某种组合,但具体细节我现在还不知道。谢谢,这个解决方案可能会重复,但它需要构建boost。目前我只使用头文件。#包括谢谢,这个解决方案非常适合我的需要。为什么这比Mythli已经描述的更直接的方法更可取?这不一定更可取,这是另一种方法。就我个人而言,我不喜欢处理正则表达式。。。