1. Les chaînes de caractères
Le type « chaîne » n’existe pas en langage C.
En langage C:
Une chaîne de caractères est un tableau d’élément de type char.
Dont le dernier élément est le caractère nul ‘0’.
Ce caractère n’est pas affichable.
Il indique la fin de la chaîne de caractères.
Exemple:
La chaîne "Bonjour" est représentée par :
B o n j o u r 0
Les chaînes de caractères 1
2. Comment déclarer une chaîne de caractères
On déclare un tableau de caractères.
De taille LongeurChaine + 1 (réservation de place en mémoire)
char Nom_du_tableau[Nombre_elements + 1] ;
On peut mettre une taille max (ex: 200). La chaîne se terminera au
‘0’. (on aura réserver de la place pour rien)
Exemples
B o n j o u r 0
Les chaînes de caractères 2
char mot [ 50 + 1] ;
char phrase [ 250 ] ;
3. Initialisation d’une chaîne
Caractère par caractère
Les chaînes de caractères 3
char mot [3 +1 ]; //déclaration
//Initialisation
mot [0] =‘a’;
mot [1] =‘i’;
mot [2] =‘e’;
mot [3] =‘0’;
A la déclaration
//comme un tableau
char phrase [200] = { 'B', 'o', 'n', 'j', 'o', 'u', 'r', '0' };
// spécifique aux chaîne de caractères
// le caractère de fin de chaîne '0' est géré automatiquement
char phrase [200] = "Bonjour" ;
// On a réservé de la place pour rien. On a besoin de seulement d’un tableau
de longueur 8 (7 pour "Bonjour" + caractère null ‘/0’)
4. Initialisation d’une chaîne
Les chaînes de caractères 4
A la déclaration
// On peut ne pas attribuer la taille de tableau lors de l’initialisation.
// La taille du tableau sera égale à la longueur de la chaine de caractères
// + le caractère null 0 qui sera ajouté à la fin du tableau automatiquement.
char phrase [] = { 'B', 'o', 'n', 'j', 'o', 'u', 'r', '0' };
char phrase [] = "Bonjour" ;
5. Initialisation d’une chaîne
Exemple
Les chaînes de caractères 5
char MonMot [4 + 1] ; // réservation de place en mémoire
MonMot [0] = ‘M’; //initialisation caractère par caractère
MonMot [1] = ‘i’;
MonMot [2] = ‘a’;
MonMot [3] = ‘m’;
MonMot [4] = ‘0’;
// Déclaration + initialisation
// initialisation comme un tableau classique
char MonMot [4 + 1] = { ‘M’, ‘i’, ‘a’, ‘m’, ‘0’ } ;
// Déclaration + initialisation
//Spécifique aux chaînes de caractères
char MonMot [4 + 1] = "Miam" ;
// le ‘0’ est rajouté automatiquement
6. Caractères spéciaux
0 caractère de fin de chaîne
" guillemet
barre oblique.
n retour à la ligne
Les chaînes de caractères 6
cout<<"PinPon";
cout<<"Pin0Pon";
cout<<"PinPon";
cout<<"PinnPon";
> PinPon
> Pin
> PinPon
> Pin
Pon
7. Exemple
Les chaînes de caractères 7
int LongueurChaine( char ch[ ] ); // Déclaration de la fonction LongueurChaine
int main()
{
char chaine[255] = "Bonjour";
int longueur = LongueurChaine(chaine);
cout<<longueur<<endl; // Le programme affiche 7
}
/* Définition de la fonction LongueurChaine. */
int LongueurChaine( char ch[ ] )
{
int i = 0;
while ( ch[i] != ‘0’) // on parcours la chaîne jusqu’à arriver au caractère ‘0’
i++;
return i;
}
8. Restriction
On ne peut pas affecter une chaîne en dehors de la déclaration.
On ne peut pas affecter une chaîne à une autre.
On ne peut pas comparer deux chaînes .
Les chaînes de caractères 8
char mot[8] = "bonjour"; // OK
char mot[8] ;
mot = "bonjour"; // ERREUR
char mot1[8] ;
char mot2[8] ; // déclaration de deux chaînes
…
mot1 = mot2; // ERREUR
char mot1[8] , char mot2[8] ;// déclaration de deux chaînes
…
if(mot1 == mot2) // ERREUR
9. Lecture d’une chaine de caractères
En utilisant scanf()
Utiliser la spécification de champ %s dans scanf pour lire la
chaîne
Lire les caractères jusqu'au prochain espace blanc rencontré
Le language C stocke le caractère nul (0) après le dernier
caractère d'espace non blanc
Les chaînes de caractères 9
10. Exemple
Les chaînes de caractères 10
int main()
{
// on lire une chaine de caractère*
dans le variable name
printf(“Lire votre nom et prénom: ”);
char name[14];
scanf(“%s”, &name);
printf(“Votre nom et prénom: %s”, name);
}
> Lire votre nom et prénom: Adel Boughida
Votre nom et prénom: Adel
Problème: scanf() permet de lire seulement les caractères avant le premier
espace rencontré
Solution: utiliser gets()
11. Lecture d’une chaine de caractères
En utilisant gets()
L'inconvénient de la lecture d'une chaîne à l'aide de scanf() est
qu'elle ne lit pas les espaces.
• Si la chaîne à lire en tant qu'entrée contient des caractères
d'espace blanc intégrés, utilisez la fonction standard gets().
Les chaînes de caractères 11
12. Exemple
Les chaînes de caractères 12
int main()
{
// on lire une chaine de caractère*
dans le variable name avec gets
printf(“Lire une chaine SVP: ”);
char chaine[10];
gets(chaine);
printf(“La chaine: %s”, chaine);
}
> Lire une chaine SVP: Math info
La chaine: Math info
Problème: scanf() permet de lire seulement les caractères avant le premier
espace rencontré
Solution: utiliser gets()
13. Ecriture d’une chaine de caractères
En utilisant printf()
Utilisez la spécification de champ %s dans printf pour écrire
une chaine de caractères.
les caractères de la chaîne qui sont imprimées sont jusqu'à 0
En utilisant puts()
L'inconvénient de l'impression d'une chaîne à l'aide de printf()
est qu'elle n'imprime pas d'espaces blancs. • Si la chaîne à
imprimer en tant que sortie contient des caractères
d'espacement intégrés, utilisez la fonction standard puts().
Les chaînes de caractères 13
14. Exemple
Les chaînes de caractères 14
int main()
{
// on déclare 2 chaînes
char nom[5] = "Adel";
printf("|%s|", nom); //affiche |Adel|
char nom2[14] = "Adel Boughida";
printf("%s", nom2); //affiche Adel
puts(nom2); //affiche Adel Boughida
}
|Adel|
Adel
Adel Boughida
15. Fonctions de la bibliothèque standard
Fonctions de manipulation de chaînes de caractères.
(définies dans string.h).
Strlen ( char Ch[ ])
Retourne la longueur de la chaîne Ch.
Strcpy ( char ChDest[ ] , char ChSource[ ] )
Copie la chaîne ChSource dans ChDest.
Strcmp ( char Ch1[ ] , char Ch2[ ])
Retourne 0 si les 2 chaînes sont identiques.
Strcat (char ChDest[ ] , char ChSource[ ] )
Recopie la chaine ChSource à la suite de ChDest.
Les chaînes de caractères 15
16. Exemple
Les chaînes de caractères 16
int main()
{
// on déclare 2 chaînes
char chaine1[20] = "bonjour";
char chaine2[20];
// L’utilisateur rentre chaine2
printf("Ecrivez votre nom");
scanf("%s", &chaine2);
//on ajoute un espace à chaine1
strcat(chaine1," ");
//on ajoute chaine2 à chaine1
strcat(chaine1,chaine2);
printf("%s", chaine1);
}
> Ecrivez votre nom
Adel
> bonjour Adel
17. Exemple
Les chaînes de caractères 17
int main()
{
// on déclare 2 chaînes
char chaine1[20] = "bonjour";
char chaine2[20];
// On copie le contenu de chaine1
dans chaine2
strcpy(chaine2, chaine1);
printf("%s", chaine2);
// On compare si les deux chaines
// sont identique
if(strcmp(str, str2) == 0) {
printf("les deux chaines sont identiques");
}
}
bonjour
les deux chaines sont identiques
18. Exemple
Les chaînes de caractères 18
int main()
{
// on déclare une chaîne
char chaine1[20] = "bonjour";
int longueur;
// Calcul de longueur de la chaine1
longueur = strlen(chaine1);
printf(" La longueur de la chaine égale à %d", longueur);
}
La longueur de la chaine égale à 7