Boost :: Split使用整个字符串作为分隔符

时间:2011-09-15 20:17:56

标签: c++ string boost tokenize

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

str =“xxaxxxxabcxxxxbxxxcxxx”

有没有一种方法可以使用“abc”作为分隔符来分割这个字符串?因此返回:

结果将是字符串“xxaxxxx”和“xxxxbxxxcxxx”

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

任何帮助将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:7)

是的,有一种方法(这是我知道的一种方式,也许有更好的方法)使用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" ) ) ;

答案 1 :(得分:6)

@Mythli建议的

split_regex很好。如果您不想处理正则表达式,可以使用ifind_all算法,如example所示。您收到所有出现的分隔符的iterator_range(开始/结束)。您的令牌位于它们之间(以及字符串的开头和结尾)。

答案 2 :(得分:0)

如果您知道您的输入字符串由哪些字符组成(例如,一个简单的英文句子,只有 EN 字符),您可以用 special_symbol 包围您的 word_delimiter,用它替换所有出现的单词定界符并用 special_symbol 分割.

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

std::vector<std::string> sentence_parts;
boost::replace_all(sentence, word, "%" + word_delimiter + "%");
boost::split(sentence_parts, sentence, boost::is_any_of("%"));

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