Manipulation des chaînes de caractères
Remplacer des lettres, inverser une chaîne de caractères, concaténer deux chaînes, ... On peut le faire nous même, mais pourquoi réinventer la roue, tout cela existe déjà dans la bibliothèque string.h
Nous allons donc en voir les plus importantes:
- strcpy Copie d'une chaîne dans une autre
- strcat Concaténation de deux chaînes de caractères (lier les deux chaînes ensemble)
- strchr Cherche la 1ère occurence d'une lettre dans une chaîne
- strlen Retourne la longueur d'une chaîne
STRCPY
Pour copier une chaîne dans une autre variable, on pouvait faire ceci
Code:
#include <stdio.h> int main(void) { const char source[] = "hello world !"; char destination[50]; int i; for (i=0; source[i]!='\0'; i++) { destination[i] = source[i]; } destination[i] = '\0'; printf("%s\n", destination); return 0; }
Avec strcpy, on va pouvoir faire cela
Code:
#include <stdio.h> #include <string.h> int main(void) { const char source[] = "hello world !"; char destination[50]; /* Attention d'avoir assez de place pour placer tous les caractères + '\0' */ strcpy(destination, source); /* copie de la variable source dans variable destination */ printf("%s\n", destination); /* affichage du contenu de la variable destination */ return 0; }
Remarques:
- On inclut la bibliothèque string.h
- On utilise strcpy
- Pas d'ajout de caractère de fin de chaîne '\0', cette fonction le fait pour nous
STRCAT
Concaténer est le fait de lier deux chaînes ensemble, exemple "hello" et " world !", fera ce résultat "hello world !"
Code:
#include <stdio.h> #include <string.h> int main(void) { char word_1[80] = "hello"; /* Attention de garder suffisamment de place pour placer word_2 */ char word_2[] = " world !"; strcat(word_1, word_2); printf("%s\n", word_1); /* affichage de word_1: "hello world !" */ return 0; }
Code:
#include <stdio.h> #include <string.h> int main(void) { char secret[80] = "\0"; /* déclaration du mot secret avec 80 caractère maxi et initialisé */ const char word[] = "secret"; int i; for (i=0; word[i]!='\0'; i++) { strcat(secret, "*"); /* ajout de "*" en fin de chaîne */ } printf("%s\n", secret); /* affichage de "******" */ return 0; }
- inclusion de la bibliothèque string.h
- Déclaration d'une chaîne avec suffisamment de place mémoire pour recevoir au moins l'équivalent de la taille de la variable word
- On ajoute des chaînes et non un caractère, donc pas '*' mais "*"
STRCHR
Cette fonction permet de retrouver l'occurrence d'un caractère, et par exemple de remplacer ce caractère par un autre
Code:
#include <stdio.h> #include <string.h> int main(void) { char word[] = "hello world!\n"; /* le '\n' nous embête */ char *p = word; /* p contient l'adresse du 1er élément du tableau word */ p = strchr(word, '\n'); /* p contiendra l'adresse du caractère '\n' */ if (p != NULL) /* si caractère '\n' trouvé dans word */ { *p = '\0'; /* on remplace '\n' par '\0' */ } printf("%s\n", word); /* affichage de word: "hello world !" sans '\n' */ return 0; }
Code:
#include <stdio.h> #include <string.h> int main(void) { char secret[] = "bonjour"; char word[] = "*******"; char *p = secret; /* p contient l'adresse du 1er élément du tableau secret */ int index; p = strchr(secret, 'o'); while (p != NULL) { index = p - secret; word[index] = *p; p = strchr(p+1, 'o'); } printf("%s\n", word); /* affichage de word: "*o**o**" sans '\n' */ return 0; }
chez vous, adresse 0x7fff36b12621
chez le voisin adresse 0x7fff36b12622
chez l'autre adresse 0x7fff36b12623
...
Vous avez trouvé à l'adresse 2, donc 0x7fff36b12623 - 0x7fff36b12621 = 2, l'indice sera 2
Bon le plus courant et même je dirais le plus simple, serait
Code:
#include <stdio.h> int main(void) { char secret[] = "bonjour"; char word[] = "*******"; int index; for (index=0; secret[index]!='\0'; index++) { if (secret[index] == 'o') { word[index] = 'o'; } } printf("%s\n", word); /* affichage de word: "*o**o**" sans '\n' */ return 0; }
strchr est très souvent utilisé pour le 1er cas lorsqu'on veut virer un '\n' gênant...
STRLEN
Cette fonction permet d'avoir la longueur d'une chaîne, elle permet entre autres de faire de l'allocation dynamique, qu'on verra plus tard
Code:
#include <stdio.h> #include <string.h> int main(void) { char secret[] = "bonjour"; int length = strlen(secret); printf("%d\n", length); /* affichage de la longueur de "bonjour", c'est à dire 7 */ return 0; }
Entraînez-vous à les utiliser
Revoir les chaînes de caractères
Revoir les pointeurs
Revoir les fonctions et prototypes
EXERCICES
Créer un jeu du pendu, on ne vous impose rien à part l'utilisation de strcmp qui permettra de comparer le mot secret à votre mot composé d'*
Merci de m'avoir lu et à bientôt pour le prochain cours
Commentaire