开发者

Boost::Split using whole string as delimiter

开发者 https://www.devze.com 2023-04-05 17:56 出处:网络
I would like to know if there is a method using boost::split to split a string using whole strings as a delimiter. For example:

I would like to know if there is a method using boost::split to split a string using whole strings as a delimiter. For example:

str = "xxaxxxxabcxxxxbxxxcxxx"

is there a method to split this string using "abc" as a a delimiter? Therefore returning:

Results would be the string "xxaxxxx" and "xxxxbxxxcxxx".

I am aware of boost::split usin开发者_高级运维g the "is_any_of" predicate, however invoking is_any_of("abc") would result in splitting the string at the single character 'a', 'b', and 'c' as well, which is not what I want.


Yes there is a way (this is a way I know, maybe there is a better way) Use boost::algorithm::split_regex to split character sequences where delimiters are regular expressions.

Example:

vector< string > result;
boost::algorithm::split_regex( result, str, regex( "^((?!abc)*abc(?!abc)*)*$" ) ) ;
copy( result.begin(), result.end(), ostream_iterator<string>( cout, "\n" ) ) ;


split_regex as suggested by @Mythli is fine. If you don't want to deal with regex, you can use ifind_all algo, as is shown in this example. You receive iterator_range (begin/end) of all occurrences of you delimiter. Your tokens are between them (and at the beginning and end of string).


If you know what characters your input string is comprised of (e.g. a simple English sentence, with only EN characters), you can surround your word_delimiter with a special_symbol, replace all appearances of your word delimiter with it and split by the special_symbol.

For example, I used '%' here:

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

You need to be sure that your input string will never have the special symbol in it, otherwise it won't work well!

0

精彩评论

暂无评论...
验证码 换一张
取 消