2011-09-15 7 views
8

Vorrei sapere se esiste un metodo che utilizza boost :: split per dividere una stringa utilizzando intere stringhe come delimitatore. Ad esempio:Boost :: Dividi con intere stringhe come delimitatore

str = "xxaxxxxabcxxxxbxxxcxxx"

c'è un metodo per suddividere questa stringa utilizzando "abc" come delimitatore? Quindi tornando:

risultati sarebbero la stringa "xxaxxxx" e "xxxxbxxxcxxx"

Sono a conoscenza di boost :: diviso utilizzando il "is_any_of" predicato, però invocando "is_any_of (" abc ")" si tradurrebbe nel dividere la stringa anche nel singolo carattere 'a', 'b' e 'c', che non è quello che voglio.

qualsiasi aiuto sarebbe apprezzato.

ringraziamento

+0

Dovresti essere in grado di utilizzare una combinazione di "equals" e il valore di stringa da utilizzare come delimitatore, ma le specifiche mi sfuggono proprio ora. –

+2

possibile duplicato di [Dividi sulla sottostringa] (http://stackoverflow.com/questions/3739280/split-on-substring) – Cubbi

risposta

6

split_regex come suggerito da @Mythli va bene. Se non vuoi gestire la regex, puoi usare ifind_all algo, come mostrato in questo example. Riceverai iterator_range (inizio/fine) di tutte le occorrenze del delimitatore. I token sono tra loro (e all'inizio e alla fine della stringa).

+0

Grazie, questa soluzione si adatta perfettamente alle mie esigenze. – andre

6

Sì, c'è un modo (questo è un modo che conosco, forse c'è un modo migliore) Utilizzare boost::algorithm::split_regex per dividere le sequenze di caratteri in cui delimitatori sono le espressioni regolari.

Esempio:

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

Grazie, questa soluzione funziona, tuttavia richiede di essere potenziata. Attualmente sto usando solo i file header. – andre

+1

#include