C++ : Création d'une bibliothèque de chaînes de caractères

Chercher et remplacer dans la chaîne

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
La recherche de texte et son remplacement dans la chaîne sont régulièrement effectuées dans les applications. Implémentez-les en minimisant la consommation de la mémoire intermédiaire.

Transcription

Dans ce chapitre nous allons doter notre classe chaîne de fonctionnalités qui sont absentes de la classe chaîne std stream, en tout cas pour certaines. Ce n'est pas le cas d'indice, qui permet d'obtenir l'indice d'un caractère dans la chaîne, ou indice 2 pour une sous chaîne, mais par contre les fonctionnalités de recherche et remplacement qu'on a ici, pour remplacer un caractère ou une chaîne dans une autre, ici je remplace le o minuscule par le double O majuscule, c'est des opérations qui sont absentes de la classe chaîne standard. Toujours le test de fuite éventuelle de la mémoire. Donc on va tout de suite commencer à écrire ces méthodes. On va commencer par indice 2, alors indice 2 qu'il soit avec un caractère ou une chaîne on va utiliser les fonctions standards a strchr, a str str. Le principe est de retourner l'indice de -1 si on ne le trouve pas donc ici strchr va me retourner l'adresse du caractère que je cherche qui est motif ici, donc je passe ici le début de ma chaîne, et si ce pointeur est non nul, si je teste je vais retourner le delta entre le début et le pointeur trouvé, ou alors -1. Indice 2 va être très similaire, il va consister à ici prendre le résultat de str str et effectuer le même traitement. Remplacer un caractère par un autre va être une opération qui va exiger qu'on parcoure ici notre chaîne, là on le fait au travers de cette boucle for, et à chaque fois que l'on trouve un caractère *p qui est égal au motif, on remplace par ce caractère qui va remplacer le motif. On retourne la nouvelle chaîne, qui est en fait notre instance modifiée. Pour sous-chaîne avec un seul paramètre va être très similaire à celui avec deux paramètres puisque la longueur qui n'est pas précisée c'est le reste de la chaîne. Alors pour des raisons de simplicité tout simplement on va implémenter l'un avec l'autre et on calcule ce qu'il reste à envoyer, donc taille moins début. Là commence maintenant l'implémentation de sous chaîne. Ici dan sous chaîne on va d'abord vérifier les paramètres. Si le début est supérieur à la taille ce n'est pas normal alors on dit que l'indice est en dehors des limites. Par contre le début et la longueur est un peu trop grande, on va tolérer ce genre de demande et on va juste « seuiller », plafonner la taille existante, pour renvoyer tout le reste de la chaîne. Maintenant que tous les paramètres sont vérifiés, on va pouvoir faire sous chaîne, alors son principe est de réduire la chaîne à la sous-chaîne qu'on nous demande et de modifier l'instance courante. En d'autres mots il faut décaler la chaîne si le début est à cinq il faut décaler de cinq dans tous les caractères, donc c'est ce qu'on fait avec cette boucle ici, on part de zéro à la longueur de la sous chaîne et puis on décale. Ici en écrasant *p par *p+mq. Une fois cette opération de décalage effectuée on va pouvoir tronquer la chaîne et définir la nouvelle taille de notre chaîne qui est réduite à la longueur de la sous chaîne, ici donc taille devient la longueur calculée initialement. On retourne donc l'instance courante. Enfin remplacer ici, va utiliser un peu toutes les fonctions que l'on a utilisées. Première chose déjà, c'est de trouver le premier exemplaire du motif que l'on nous demande, et puis si on en trouve au moins un continuer à remplacer, d'abord le premier puis les suivants. Ici, si pos est supérieur ou égal à zéro, donc j'en ai trouvé au moins un je pourrais faire les remplacements, alors comment les faire alors je retourne l'espace courant, première chose donc je vais prendre la sous chaîne qui précède le motif trouvé donc je cherche je o minuscule, par exemple dans le test je vais déjà prendre ce qui précède le o minuscule. Et puis je vais lui ajouter autre chose. Je vais le concaténer, ce qui précède le o minuscule, avec le nouveau motif qui est le double O si vous vous rappelez du test, c'était un double O. Je remplace le petit o par un double O, là par ces paramètres que j'ai reçus. Donc j'utilise là mes surcharges d'opérateurs abondamment. Mais après ce motif il faut que j'y adjoigne tout ce qui suit la partie et il peut y avoir encore des o à remplacer. Donc il va falloir que j'appelle récursivement, c'est-à-dire que remplacer va s'appeler lui-même pour effectuer les remplacements dans la chaîne qui suit. La chaîne qui suit je vais la créer en appelant un constructeur chaîne et dedans qu'est ce que je mets dans ce constructeur chaîne, j'y mets donc ma valeur actuelle, chaîne, et cette valeur actuelle si je la prends telle quelle je prends les débuts de ma chaîne alors il faut que je saute la position où j'ai trouvé mon motif et le motif lui-même donc toute la suite de ma chaîne. Donc j'ai crée une nouvelle chaîne qui démarre à la suite du motif trouvé. Donc pour bonjour ce sera njour que contiendra cette nouvelle chaîne. Dans cette nouvelle chaîne je lui demande de remplacer mon motif par [inaudible]. Et donc mon o simple par un double O. C'est une récursivité un peu spéciale puisque ça ne se fait pas sur la même instance, je crée une nouvelle chaîne dans laquelle je vais remplacer dans njour petit o par double O. Comme ça je le fais sur la première occurrence et les autres, au lieu de faire une boucle comme j'aurais pu le faire, je le fais par récursivité. On a maintenant implémenté toute notre recherche et remplacement je peux alors sauvegarder et continuer pour vérifier et passer au test. Si on remonte on retrouve notre bonjour avec ses double o qui ont été correctement remplacés, on a maintenant donc des fonctionnalités de chercher et de remplacer dans notre classe chaîne, on va aussi lui ajouter dans la section suivante une fonctionnalité de découpage de notre chaîne, selon des séparateurs et en plusieurs autres chaînes.

C++ : Création d'une bibliothèque de chaînes de caractères

Acquérez les méthodes de développement en C++ avec la création de bibliothèques de chaînes de caractères personnalisées. Abordez les constructeurs, les structures de données, etc.

45 min (10 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :24 oct. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !