La bibliothèque C + + chaîne dispose de plusieurs fonctions utiles pour la manipulation des chaînes , mais aucune recherche générale et remplacer . Bien qu'il y ait beaucoup d'informations sur des algorithmes optimisés pour la mise en œuvre remplacement de texte arbitraire , de nombreux algorithmes impliquent des structures de données complexes et difficiles à suivre les techniques telles que l'arithmétique des pointeurs . Pour la plupart des programmes , de recherche et de remplacement n'est pas un goulot d'étranglement de performance , il est donc plus judicieux d'utiliser un algorithme simple, facilement compréhensible. Ceci est possible en profitant de quelques-unes des fonctions de chaînes existantes pour gérer la manipulation de bas niveau. Instructions
1
Ecrire le contour de votre fonction de remplacement de la chaîne :
replaceSubstring de chaîne ( string source , string match , chaîne replace ) {string out = ""; retourneront ; }
2
Ajouter une boucle qui trouve tous les matches de chaîne dans la chaîne . Les lastpos variable sera utile lorsque vous commencez à ajouter du code pour construire la nouvelle chaîne :
size_t pos = 0; //Démarrer la recherche au premier lastpos charactersize_t = 0 ; while (( pos = source.find ( ! match pos) ) = string :: OSBL) //boucle jusqu'à ce que aucune correspondance n'est trouvée {pos = pos + match.lengh (); //Démarrer la recherche pour le prochain match à la fin de cette matchlastpos = pos ;}
3
construire la chaîne de production que des correspondances sont trouvées :
size_t pos = 0; //Démarrer la recherche au premier lastpos charactersize_t = 0 ; while (( pos = source.find (correspondance , pos) ) = string :: OSBL) //boucle jusqu'à ce que aucune correspondance n'est trouvée { sortie + = source.substr ( lastpos , pos - lastpos ) ; ! //Ajouter tous les caractères qui ont été ignorés overoutput + = remplacer ; pos = pos + match.lengh (); //Démarrer la recherche pour le prochain match à la fin de cette matchlastpos = pos ;} sortie + = source.substr ( lastpos ) ; //Ajouter le reste de la chaîne source Photos