Remplacer une sous-chaîne par une autre sous-chaîne dans une chaîne de caractères

Problème

Vous voulez remplacer une partie d’une chaîne de caractères par une autre chaîne de caractères.

Solution

Si les deux chaînes de caractères (la partie à remplacer et son remplacement) ont la même taille, il suffit de remplacer les caractères octet par octet, par exemple avec memcpy(). Si la chaîne à remplacer est plus petite que celle qu’elle remplace, le processus est identique, puis, vous devez décaler la fin de la chaîne originale. Si la chaîne à remplacer est plus grande que celle qu’elle remplace, créez alors une nouvelle chaîne de taille suffisante, et recopiez-y ce que vous souhaitez.

Discussion

Une fonction qui remplace une sous-chaîne par une autre a un prototype de ce genre :


char *remplace (char *original, int debut, int longueur, 
                const char *remplacement);
 

Si strlen(remplacement) est égal à longueur, le contenu de la fonction est tout simplement memcpy(original+debut, remplacement, longueur);.

Si la sous-chaîne de remplacement n’est en fait qu’un seul caractère, n’utilisez pas memcpy(), mais ceci : original[debut] = remplacement[0];.

Les autres cas s’avèrent plus complexes. Voici un exemple de fonction qui teste le cas dans lequel nous sommes, y compris ceux cités plus haut, et qui renvoie une nouvelle chaîne...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Récupérer le chemin et le nom d'un fichier spécifiés dans une chaîne de caractères
Suivant
Déterminer si une chaîne de caractères est contenue dans une autre et à quelle position