Comment puis-je trouver toutes les positions d'une sous-chaîne dans une chaîne?
Comment pourrais-je aller à ce sujet?Je recherche une chaîne de grande taille pour tous les emplacements d'une chaîne.
source d'informationauteur Herr Char
Vous devez vous connecter pour publier un commentaire.
Deux autres réponses sont correctes, mais ils sont très lents et avoir O(N^2) complexité. Mais il y a Knuth-Morris-Pratt algorithme qui trouve toutes les sous-chaînes en O(N) la complexité.
edit:
Il y a aussi un autre algorithme appelé "Z" avec O(N) la complexité, mais je ne pouvais pas trouver source en anglais de cet algorithme (peut-être parce qu'il est aussi un des plus célèbre chose avec le même nom - le Z-fonction de Riman), donc va juste mettre le code ici et d'expliquer ce qu'il n'.
À l'aide de
std::string::find
. Vous pouvez faire quelque chose comme:MODIFIER: Doh! Merci pour la remarque, Nawaz! Mieux?
Je vais ajouter pour être complet, il existe une autre approche est possible avec
std::search
fonctionne commestd::string::find
la différence est que vous travaillez avec des itérateurs, quelque chose comme:Je trouve que ce parfois surpasse
std::string::find
esp. si vous déclarez votre chaîne comme unvector<char>
.Simplement
use std::string::find()
qui retourne la position à laquelle la chaîne a été trouvée, oustd::string::npos
si aucune n'a été trouvé.Ici est la documentation.
Un ici est l'exemple pris dans cette documentation: