Algorithmique et Langage C
www.polytech.unice.fr/žvg/index-xidian.html
Granet Vincent - [email protected]
Xi’an - Octobre 2019 - Avril 2020
Les Chaînes de Caractères
Introduction
Définition
Une chaîne de caractères est unesuite, éventuellement vide, de carac- tères
Type Chaîne
Certains langages de programmation définissent untypepour les représenter, comme par exemple le langage Java avec le typeString, mais d’autres langages, comme le langage C, ne définissent pas de type spécifique pour les représenter.
son
Constantes littérales
Les constantes chaînes de caractères sont parenthésées par un délimiteur particulier, bien souvent le guillemet,".
"bonjour à tous"
"" //chaîne vide
"a" //chaîne avec le caractère a. Différent du caractère 'a'
"1" //chaîne avec le caractère 1. Différent de l'entier 1
"le délimiteur \" d'une chaîne"
En C, les caractères spéciaux'\n', '\t','\v',etc. peuvent faire partie d’une chaîne de caractères.
"\thello !\n"
son
Opérateurs et Fonctions
Les langages de programmation qui possèdent un type « chaîne de caractères » proposent desopérateursde manipulation des chaînes de caractères. Par exemple, bien souvent l’opérateur+définit l’opération de concaténation de deux chaînes.
//Exemple en Java String s = "Bonjour";
s = s + " à tous !"; //s = "Bonjour à tous !"
Les langages qui ne définissent pas de type chaîne de caractères, comme le langage C, ne proposent pas d’opérateur, mais desfonctions.
//Exemple en C
i n t lg = strlen("Bonjour à tous !");
//lg == 16
son
Les chaînes de caractères en C
Pas de type « chaîne de caractères ». Une chaîne est un tableau de caractères terminé par un caractère de fin'\0'.
c h a r s1[10] = { 'b','o','n','j','o','u','r','\0' };
c h a r s2[] = { 'b','o','n','j','o','u','r','\0' };
c h a r s3[10] = "bonjour";
c h a r s4[] = "bonjour";
printf("%lu\n", s i z e o f "bonjour"); //⇒ 8 printf("%lu\n", s i z e o f s1); //⇒ 10 printf("%lu\n", s i z e o f s2); //⇒ 8 printf("%lu\n", s i z e o f s3); //⇒ 10 printf("%lu\n", s i z e o f s4); //⇒ 8
son
Les chaînes de caractères en C
Le compilateur C ajoute automatiquement le caractère'\0' à la fin d’une constante littérale.
Ne pas oublier ce caractère'\0'quand vous créez une chaîne de caractères.
La bibliothèque C (libc) propose de nombreuses fonctions de manipulation des chaînes de caractères.
#include <string.h>
Toutes ces fonctions ne gèrent pasl’allocation d’espace mémoire (saufstrdup).
son
Exemples
/
Antécédent : s une chaîne de caractères Rôle : renvoie la longueur de la chaîne s /
i n t strlen(c o n s t c h a r s[]) { i n t i=0;
w h i l e (s[i]!='\0') i++;
r e t u r n i;
} son
Exemples
/ Antécédent : s2 chaîne à copier dans s1 Conséquent : s1 == s2
Rôle : copie la chaîne s2 dans la chaîne s1 /
v o i d strcpy(c h a r s1[], c o n s t c h a r s2[]) { i n t i=0;
w h i l e ((s1[i]=s2[i]) != '\0')
i++;
} ....
c h a r str1[10], str2[4];
strcpy(str1, "bonjour"); //str1 == "bonjour"
strcpy(str2, "bonjour"); //problème !!!
strcpy("bonjour", "hello"); //gros problème !!!
son