10
votes

Boost :: Split à l'aide de la chaîne entière comme délimiteur

J'aimerais savoir s'il y a une méthode utilisant Boost :: Split pour diviser une chaîne à l'aide de chaînes entières en tant que délimiteur. Par exemple: xxx

existe une méthode pour diviser cette chaîne à l'aide de "abc" comme un délimiteur? Donc revenir:

résultats serait la chaîne "xxaxxxx" et "xxxxbxxxcxxx" .

Je suis conscient de boost :: Split à l'aide du "is_any_of" prédicat, cependant appeler is_any_of ("ABC") entraînerait la division de la chaîne du seul caractère "A ',' B ', et "c" aussi, ce qui n'est pas ce que je veux.


2 commentaires

Vous devriez pouvoir utiliser une combinaison de égale et la valeur de chaîne à utiliser comme délimiteur, mais les spécificités m'ont éliminé en ce moment.


Dupliqué possible de Split sur la sous-chaîne


3 Réponses :


8
votes

Oui, il y a un moyen (c'est un moyen que je sache, peut-être qu'il y a une meilleure façon) utilise boost :: algorithme :: split_regex pour scinder les séquences de caractères où les délimiteurs sont des expressions régulières.

Exemple: xxx


2 commentaires

Merci, cette solution fonctionne, mais elle nécessite un coup de pouce pour être construit. Actuellement, j'utilise des fichiers d'en-tête seulement.


#include



6
votes

split_regex comme suggéré par @mythli va bien. Si vous ne voulez pas traiter avec regex, vous pouvez utiliser ifind_all algo, comme indiqué dans ce exemple . Vous recevez itérator_range (début / fin) de toutes les occurrences de votre délimiteur. Vos jetons sont entre eux (et au début et à la fin de la chaîne).


1 commentaires

Merci, cette solution correspond parfaitement à mes besoins.



0
votes

Si vous savez quels caractères sont composés de caractères (par exemple une phrase anglaise simple, avec uniquement en caractères), vous pouvez surmonter votre Word_DelImiter avec un symbole spécial, remplacez toutes les apparences de votre parole Délimiter avec elle et scindé par le spécial_symbol .

Par exemple, j'ai utilisé "%" ici: xxx

Vous devez être sûr que votre chaîne d'entrée n'aura jamais le symbole spécial de celui-ci, Sinon, cela ne fonctionnera pas bien!


2 commentaires

Pourquoi cela serait-il préférable à l'approche la plus simple que Mythli décrit déjà?


Ce n'est pas nécessairement préférable, c'est une autre façon de le faire. Personnellement, je préfère ne pas gérer les regexnes ...