Boost:: Split с использованием цельной строки в качестве разделителя
Я хотел бы знать, если есть метод, использующий boost :: split для разделения строки, используя целые строки в качестве разделителя. Например:
str = "xxaxxxxabcxxxxbxxxcxxx"
Есть ли способ разделить эту строку, используя "abc"
качестве разделителя? Поэтому возвращаюсь:
Результатами будут строки "xxaxxxx"
и "xxxxbxxxcxxx"
.
Мне известно о boost::split
с использованием предиката "is_any_of"
, однако is_any_of("abc")
приведет к разбиению строки на отдельные символы "a", "b" и "c", что не то, что я хочу.
Ответы
Ответ 1
split_regex
, как это предложил @Mythli, прекрасно. Если вы не хотите иметь дело с регулярным выражением, вы можете использовать ifind_all
algo, как показано в этом . Вы получаете iterator_range
(начало/конец) всех вхождений вашего разделителя. Ваши жетоны находятся между ними (и в начале и в конце строки).
Ответ 2
Да, есть способ (это я знаю, может быть, есть лучший способ) Используйте 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" ) ) ;