2011-09-15 27 views
8

Me gustaría saber si hay un método que use boost :: split para dividir una cadena utilizando cadenas enteras como delimitador. Por ejemplo:Boost :: Dividir utilizando una cadena completa como delimitador

cadena = "xxaxxxxabcxxxxbxxxcxxx"

¿Existe un método para dividir esta cadena usando "abc" como un delimitador? Por lo tanto regresando:

resultados serían la cadena "xxaxxxx" y "xxxxbxxxcxxx"

Soy consciente del impulso :: división utilizando el "is_any_of" predicado, sin embargo invocar "is_any_of (" ABC ")" resultaría al dividir la cadena en los caracteres individuales 'a', 'b' y 'c' también, que no es lo que quiero.

cualquier ayuda sería apreciada.

agradecimiento

+0

Debería poder usar alguna combinación de 'igual' y el valor de cadena para usar como delimitador, pero los detalles me eluden en este momento. –

+2

posible duplicado de [División en subcadena] (http://stackoverflow.com/questions/3739280/split-on-substring) – Cubbi

Respuesta

6

split_regex como sugiere @Mythli está muy bien. Si no desea tratar con expresiones regulares, puede usar el ifind_all algo, como se muestra en este example. Recibe iterator_range (comienzo/fin) de todas las ocurrencias de su delimitador. Tus tokens están entre ellos (y al principio y al final de la cadena).

+0

Gracias, esta solución se ajusta perfectamente a mis necesidades. – andre

6

Sí hay una manera (se trata de una manera que sé, tal vez hay una mejor manera) Utilice boost::algorithm::split_regex dividir secuencias de caracteres, donde delimitadores son expresiones regulares.

Ejemplo:

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

Gracias, esta solución funciona, sin embargo, requiere que se genere impulso. Actualmente estoy usando solo archivos de encabezado. – andre

+1

#include

Cuestiones relacionadas