Dans certaines situations, on aimerait disposer de variables capables d'accueillir des chaînes de caractères susceptibles d'évoluer (à la fois en contenu et en nombre de caractères) au fil de l'exécution du programme. Le langage C, ne comporte pas de véritable type chaîne, mais il est possible de s'arranger avec des tableaux de caractères, et un certain nombre de fonctions prévues pour manipuler les chaînes.
Soit un tableau de caractères déclaré par : char nom[30];
L'instruction : scanf("%s",nom);
va lire une suite de caractères au clavier pour les ranger
dans le tableau nom, en commençant à partir de nom[0] et en ajoutant automatiquement,
à la suite, un caractère de fin de chaîne : \0.
L'instruction : gets(nom);
lit une suite de caractères en la rangeant dans le tableau
nom, terminée par un caractère de fin de chaîne : \0.
L'instruction : printf("%s",nom);
va afficher à l'écran, les caractères trouvés dans le
tableau nom, en commençant par nom[0] et en s'interrompant à la rencontre
d'un caractère de fin de chaîne : \0.
L'instruction : puts(nom);
affiche les caractères trouvés à partir de nom[0], en
s'interrompant à la rencontre du caractère de fin de chaîne \0
et fait ensuite un retour à la ligne.
Exemple:
main()
{
char nom[20], prenom[20], ville[25];
printf("Quelle
est votre ville : ");
gets
(ville);
printf("Donnez
votre nom et votre prénom : ");
scanf("%s
%s", nom, prenom);
printf("Bonjour cher %s %s qui habitez
à ", prenom, nom);
puts
(ville);
}
La fonction gets permet de tenir compte des espaces, et des délimiteurs, alors que scanf n'en tient pas compte.
Attention: pour stocker une chaîne de n caractères, il faut prévoir un tableau de taille n+1, afin de placer le caractère de fin de chaîne \0.
Syntaxe:
strcmp(chaine1, chaine2);
compare les deux chaînes chaine1 et chaine2 et fournit en résultat une valeur entière qui est:
Exemple:
#include <stdio.h>
#include <string.h>
main()
{
char mot1[30],mot2[30];
int comp;
printf("Donnez
deux mots en minuscules :\n");
scanf("%s%s",
mot1, mot2);
comp=strcmp(mot1,mot2);
if (comp<0) printf ("Dans l\'ordre
alphabétique\n");
if (comp==0) printf ("Identique\n");
if (comp>0) printf ("Pas dans
l\'ordre alphabétique\n");
}
Syntaxe:
strcpy(destination,source);
recopie la chaîne source dans la chaîne destination.
Exemple:
#include <stdio.h>
#include <string.h>
main()
{
char mot1[30],mot2[30];
strcpy(mot1,"bonjour
à vous"); /* la chaîne "bonjour à vous"
est copiée dans mot1 */
strcpy(mot2,
mot1); /* le contenu de la chaîne mot1 est copié
dans mot2 */
}
Syntaxe:
strlen(chaine);
renvoie un entier qui correspond au nombre de caractères situés avant le caractère de fin de chaîne \0 dans chaine.
Exemple:
#include <stdio.h>
#include <string.h>
main()
{
char mot[30];
strcpy(mot,"bonjour");
printf("mot
est long de %d caractère(s)\n",strlen(mot));
}
Syntaxe:
strcat(destination,source);
concatène la chaîne source à la suite de la chaîne destination.
Exemple:
#include <stdio.h>
#include <string.h>
main()
{
char mot1[30],mot2[30];
strcpy(mot1,"sir");
strcpy(mot2,"hello ");
strcat(mot2,mot1);
printf("bonjour monsieur en anglais
se dit %s.", mot2);
}