L'algorithme de recherche de texte est une méthode fondamentale dans le traitement de texte et la recherche d'informations. Cet algorithme nous permet de localiser et d'identifier les occurrences d'une sous-chaîne(ou d'un modèle) dans un plus grand morceau de texte.
Comment ça fonctionne
- Commencez par un plus grand morceau de texte(ou document) et une sous-chaîne à rechercher.
- Parcourez chaque caractère du texte de manière séquentielle.
- Comparez la sous-chaîne avec une partie du texte qui a la même longueur que la sous-chaîne. Si une correspondance est trouvée, enregistrez la position actuelle.
- Passez à la position suivante et continuez la comparaison.
Exemple
Considérez le texte : "Recherchons une sous-chaîne dans ce texte pour voir comment l'algorithme fonctionne."
Et la sous-chaîne à rechercher : "sous-chaîne"
- Commencez à la position 0. Comparez
Let'avec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 1. Comparez
et'savec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 2. Comparez
t's" avec "sous-chaîne". Aucune correspondance. - Déplacez-vous en position 3. Comparez
's savec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 4. Comparez
seavec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 5. Comparez
seaavec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 6. Comparez
earcavec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 7. Comparez
archavec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 8. Comparez
rch" avec " sous-chaîne ". Aucune correspondance. - Déplacez-vous en position 9. Comparez
ch wavec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 10. Comparez
h wiavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 11. Comparez "
witavec " sous-chaîne ". Aucune correspondance. - Déplacez-vous en position 12. Comparez
withavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 13. Comparez
ithiavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 14. Comparez
thinavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 15. Comparez
hinnavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 16. Comparez
in tavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 17. Comparez
n thavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 18. Comparez "
thiavec " sous-chaîne ". Aucune correspondance. - Déplacez-vous à la position 19. Comparez
thisavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 20. Comparez
his" avec " sous-chaîne ". Aucune correspondance. - Déplacez-vous à la position 21. Comparez
is tavec "sous-chaîne". Aucune concordance. - Déplacez-vous en position 22. Comparez
s teavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 23. Comparez
ubstavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 24. Comparez
bstravec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 25. Comparez
streavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 26. Comparez
trinavec "sous-chaîne". Aucune concordance. - Déplacez-vous à la position 27. Comparez
ringavec "sous-chaîne". Correspondance trouvée, position d'enregistrement 27.
La sous-chaîne "substring" se trouve à la position 27 dans le texte.
Exemple de code en C++
#include <iostream>
#include <string>
#include <vector>
std::vector<int> textSearch(const std::string& text, const std::string& query) {
std::vector<int> positions;
for(int i = 0; i <= text.length()- query.length(); ++i) {
int j = 0;
while(j < query.length() && text[i + j] == query[j]) {
++j;
}
if(j == query.length()) {
positions.push_back(i);
}
}
return positions;
}
int main() {
std::string text = "Let's search for a substring within this text to see how the algorithm works.";
std::string query = "substring";
std::vector<int> result = textSearch(text, query);
std::cout << "Substring found at positions: ";
for(int pos: result) {
std::cout << pos << ";
}
std::cout << std::endl;
return 0;
}
Dans cet exemple, la textSearch fonction est utilisée pour trouver les positions de la sous-chaîne "sous-chaîne" dans le texte. Le résultat sera un vecteur contenant les positions de départ des matchs.

