7
votes

Tokenizer à chaîne pour la chaîne de CPP?

Je veux utiliser String Tokenizer pour la chaîne de CPP, mais tout ce que je pouvais trouver, c'était pour Char *. Y a-t-il quelque chose de similaire pour CPP String?


2 commentaires

Que diriez-vous de certains des exemples à partir des éléments suivants: codeProject.com/kb/recipes/tokenizer. Aspx Ils sont très efficaces et un peu élégants. La bibliothèque Toolkit String facilite le traitement des chaînes complexes simples et faciles en C ++.


Dupliqué possible de Utiliser Strtok avec une STD :: String


5 Réponses :


0
votes

Consultez les algos stl comme wind_first_of , recherche_first_not_of et ainsi de suite pour créer une personnalisée.


0 commentaires

4
votes

Vous pouvez faire comme dit par chubsdad ou utiliser Boost tokenizer: http://www.boost.org/doc/libs/1_44_0/libs/Tokenizer/tokenizer.htm

Le faire par vous-même n'est pas si compliqué si vous êtes attaqué par boost.


0 commentaires

1
votes

Vous devez jeter un coup d'œil à Boost Tokenizer


0 commentaires

7
votes

Que voulez-vous dire par "jeton"? Si c'est quelque chose de séparé par tout blancheur , les flux de chaîne sont ce que vous voulez: xxx

alternativement, si vous recherchez un certain caractère de séparation unique, vous pouvez remplacer < Code> ISS >> jeton avec std :: getline (ISS, jeton, sep_char) .

Si c'est plus d'un caractère pouvant agir en tant que séparateur (et si ce n'est pas des espaces bleus), une combinaison de std :: string :: recherche_first () et et std :: string :: substr () devrait faire.


4 commentaires

Existe-t-il une bonne raison de préférer pour (;;) sur tandis que (ISS >> jeton) (supposant jeton a été déclaré avant la boucle) ? Dans cet exemple, ce serait une ligne plus courte et, à mon avis, du moins pas moins lisible.


@ Space_C0WB0Y: (Je compris seulement votre commentaire. Eh bien, au moins je pense que je pense que je préfère ...) Je préfère simplement préférer une variable plus locale sur la contrainte du pendant boucle.


@SBI Vous pouvez utiliser une boucle comme ceci: pour (jeton de cordes; ISS >> jeton;) {...} Pour vous débarrasser de la déclaration IF et avoir toujours une variable localisée.


@erlc qui semble en effet meilleur que ma solution. Bonne idée! (Je modifierais ma réponse, mais c'est une douleur à faire au téléphone. N'hésitez pas à le faire vous-même, si vous voulez.)



0
votes

Essayez cet extrait que j'ai trouvé quelque part (peut-être même ici?): XXX


0 commentaires