Comment ajouter une valeur dans une chaîne de caractères en programmation
En programmation, manipuler du texte suppose de comprendre comment fonctionnent les chaînes de caractères. Une chaîne de caractères est, en effet, plus qu’un simple tableau : c’est un objet formé d’une suite de caractères, stockés généralement sous forme de tableau de type char. En langage C, chaque chaîne se termine toujours par un caractère spécial, appelé le caractère nul ou '\0', qui permet de marquer la fin de la chaîne.
Représentation et initialisation d’une chaîne de caractères en C
Une chaîne de caractères de type C est représentée par un tableau à une dimension de caractères, terminée par le caractère nul '\0'. Par exemple, pour déclarer une chaîne appelée chaine pour contenir le mot "bonjour", on peut écrire :
char chaine[] = "bonjour";
Cette syntaxe, simple et efficace, a l’avantage d’ajouter automatiquement le '\0' à la fin du tableau. Le compilateur calcule la taille nécessaire, qui correspond au nombre de caractères plus un pour le caractère nul.
Il est important de noter que cette syntaxe ne fonctionne que lors de la déclaration-initialisation. Si vous souhaitez modifier le contenu d'une chaîne après déclaration, par exemple remplacer "bonjour" par "toto" avec chaine = "toto";, le compilateur rejette l'instruction. En effet, en C, l’affectation directe à un tableau après déclaration est interdite. La seule méthode valide pour modifier une chaîne existante est de copier le contenu caractère par caractère.
Ajouter une valeur dans une chaîne : concaténation et copie
Pour ajouter une valeur dans une chaîne de caractères en C, on utilise généralement les fonctions de la bibliothèque <string.h>, notamment :
Lire aussi: INPI : Guide complet Signature Électronique
- strcpy pour copier une chaîne dans une autre
- strcat pour concaténer (ajouter) une chaîne à la fin d'une autre
Copier une chaîne avec strcpy
La fonction strcpy permet de copier le contenu d’une chaîne source dans une chaîne destination toute prête à recevoir cette copie. Son prototype est :
char* strcpy(char* destination, const char* source);
Il faut veiller à ce que la chaîne destination soit assez grande pour accueillir toute la chaîne source, incluant le caractère nul de fin.
Concaténer une chaîne avec strcat
Pour ajouter une chaîne à la fin d’une autre, on utilise la fonction strcat :
void strcat(char destination[], const char source[]);
Cette fonction colle les caractères de la chaîne source à la suite de la chaîne destination. La chaîne destination doit disposer d’un espace suffisant pour contenir le résultat entier. Elle supprime le caractère nul final de la chaîne destination et le remplace par les caractères de la chaîne source, puis ajoute un caractère nul final.
Exemple de concaténation :
Lire aussi: SARL : Comment distribuer des dividendes ?
char chaine1[100] = "Bonjour ";char chaine2[] = "le monde";strcat(chaine1, chaine2);// chaine1 vaut maintenant "Bonjour le monde"
Manipulation des chaînes au moyen des boucles
Une chaîne de caractères peut être parcourue comme un tableau : on peut ainsi accéder caractère par caractère grâce à une boucle. La condition d'arrêt est la rencontre du caractère nul '\0', signe de la fin de chaîne.
Un parcours classique utilise une boucle while :
int i = 0;while (chaine[i] != '\0') { // traiter chaine[i] i++;}Cette approche est utile pour parcourir ou afficher la chaîne si on ne souhaite pas recourir à l’opérateur d’affichage dédié.
Fonctions courantes pour gérer les chaînes de caractères
Outre strcpy et strcat, la bibliothèque <string.h> fournit plusieurs fonctions très utiles :
- strlen : calcule la longueur d'une chaîne sans compter le '\0'.
- strcmp : compare deux chaînes lexicographiquement.
- strchr : cherche la première occurrence d'un caractère dans une chaîne.
- strpbrk : cherche dans une chaîne le premier caractère parmi une liste donnée.
- strstr : cherche une chaîne dans une autre.
- sprintf : écrit du texte formaté dans une chaîne.
Exemples fondamentaux
Calculer la longueur d’une chaîne
strlen retourne le nombre de caractères avant le '\0'. Il est conseillé d’appeler cette fonction une fois avant une boucle et de stocker la taille pour ne pas la recalculer à chaque itération.
Lire aussi: Fiche INSEE : le guide
Comparer deux chaînes
strcmp renvoie zéro si les chaînes sont égales, un nombre négatif ou positif selon l’ordre lexicographique.
Rechercher un caractère dans une chaîne
strchr retourne un pointeur vers la première occurrence trouvée, permettant ainsi de traiter directement la partie restante de la chaîne.
Concaténation sécurisée avec contrôle de taille
Avant de concaténer deux chaînes, il est crucial de garantir que la destination peut accueillir la chaîne finale pour éviter des dépassements de tampon très dangereux en C.
Lecture et affichage de chaînes depuis la console
En programmation C, on peut lire une chaîne tapée par l’utilisateur avec l’opérateur >> (par exemple, cin>>chaine; en C++), mais cela s'arrête dès qu’un séparateur (espace, tabulation, fin de ligne) est rencontré. On ne peut pas ainsi lire de phrases comportant des espaces.
Pour lire des phrases entières, il faut recourir à la fonction getline (en C++ objet) ou écrire une fonction personnalisée utilisant une boucle et l’indicateur %c de scanf en C. Il est également possible d’utiliser scanf avec un nombre maximum de caractères précisé pour éviter les dépassements.
Écriture formatée dans une chaîne : la fonction sprintf
La fonction sprintf fonctionne comme printf, mais au lieu d’écrire sur la console, elle écrit dans une chaîne de caractères. Ceci est très utile pour créer des chaînes formatées dynamiquement.
Exemple :
char chaine[50];int age = 15;sprintf(chaine, "Tu as %d ans", age);// chaine contient "Tu as 15 ans"
Il faut s’assurer que la chaîne cible ait une taille suffisante.
La concaténation manuelle : traverser une chaîne caractère par caractère
Il est possible de concaténer une valeur dans une chaîne manuellement en manipulant directement les tableaux de caractères, par exemple : chercher la fin de la chaîne (le caractère '\0'), puis copier caractère par caractère la nouvelle chaîne à partir de cet endroit.
int i = 0;while (chaine1[i] != '\0') i++; // Trouver la finint j = 0;while (chaine2[j] != '\0') { chaine1[i] = chaine2[j]; i++; j++;}chaine1[i] = '\0'; // Terminer la chaîneCeci simule la fonction strcat manuellement et montre bien le principe de l’ajout d’une valeur dans une chaîne.
Les limites et précautions en manipulation des chaînes
Il est primordial de toujours réserver un tableau de taille suffisante pour ne pas dépasser les limites mémoire et éviter les erreurs.
La terminologie importante :
- Une chaîne terminée par '\0' définit sa fin pour le programme.
- Éviter les affectations directes hors déclaration pour les tableaux de caractères.
- Utiliser les fonctions standard comme strcpy, strcat pour copier et concaténer.
- Ne pas exécuter inutilement des appels à strlen dans les boucles pour des raisons d’optimisation.
Conclusion sur l’utilisation des chaînes en programmation
L’utilisation des chaînes de caractères en programmation C demande une bonne maîtrise des tableaux de caractères terminés par '\0'. L’ajout d’une valeur dans une chaîne s’effectue principalement par concaténation avec strcat, ou manuellement case par case, en prenant soin de la taille du tableau hôte. Des fonctions standards telles que strcpy, strlen, strcmp facilitent considérablement les manipulations.
Il est aussi important de savoir lire et afficher des chaînes efficacement et en toute sécurité, en utilisant les opérateurs et fonctions adaptées. La gestion correcte des chaînes est une compétence fondamentale en programmation en C et dans beaucoup d’autres langages.
Programmation C - 10. Les fonctions de chaînes de caractères | strings
balises:
