Boost :: Split с использованием всей строки в качестве разделителя - PullRequest
10 голосов
/ 16 сентября 2011

Я хотел бы знать, существует ли метод, использующий boost :: split для разделения строки с использованием целых строк в качестве разделителя. Например:

str = "xxaxxxxabcxxxxbxxxcxxx"

есть ли способ разбить эту строку, используя "abc" в качестве разделителя? Поэтому возвращаем:

Результатом будет строка "xxaxxxx" и "xxxxbxxxcxxx".

Мне известно, что boost::split использует предикат "is_any_of", однако вызов is_any_of("abc") приведет к разбиению строки на один символ 'a', 'b' и 'c', что не что я хочу.

Ответы [ 2 ]

7 голосов
/ 16 сентября 2011

Да, есть способ (это способ, который я знаю, возможно, есть лучший способ). Используйте 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" ) ) ;
6 голосов
/ 16 сентября 2011

split_regex как подсказывает @Mythli, все в порядке. Если вы не хотите иметь дело с регулярным выражением, вы можете использовать ifind_all algo, как показано в этом примере . Вы получаете iterator_range (начало / конец) всех вхождений вашего разделителя. Ваши токены находятся между ними (и в начале и в конце строки).

...