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
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 ] ;
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’)
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" ;
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
Caractères spéciaux
0 caractère de fin de chaîne (NULL)
" 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
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;
}
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
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
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()
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
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()
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
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
Fonctions de la bibliothèque standard
Fonctions de manipulation de chaînes de caractères.
(définies dans string.h).
strlen(char chaine[ ])
Retourne la longueur de la chaîne chaine.
strcpy(char chaineDest[], char chaineSource[])
Copie la chaîne chaineSource dans chaineDest.
Les chaînes de caractères 15
Fonctions de la bibliothèque standard
strcmp ( char chaine1[] , char chaine2[])
Retourne 0 si les deux chaînes sont identiques.
strcat (char chaineDest[] , char chaineSource[] )
Recopie la chaine chaineSource à la suite de chaineDest.
Strnset (char chaine [], char c, int n)
 Elle remplace les n premiers caractères d'une chaîne par un
caractère donné c. Si n est supérieur à la longueur de la
chaîne, la longueur de la chaîne est utilisée à la place de n.
Les chaînes de caractères 16
Exemple
Les chaînes de caractères 17
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
Strcat()
Exemple
Les chaînes de caractères 18
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
Strcmp() and strcpy()
Exemple
Les chaînes de caractères 19
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
Strlen()

chapitre1.ppt

  • 1.
    Les chaînes decaractè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 unechaî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èrepar 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 Leschaî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 Leschaî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èrede fin de chaîne (NULL) " 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 decaractè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 peutpas 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 chainede 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 decaractè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 chainede 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 decaractè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 chainede 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 decaractè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 labibliothèque standard Fonctions de manipulation de chaînes de caractères. (définies dans string.h). strlen(char chaine[ ]) Retourne la longueur de la chaîne chaine. strcpy(char chaineDest[], char chaineSource[]) Copie la chaîne chaineSource dans chaineDest. Les chaînes de caractères 15
  • 16.
    Fonctions de labibliothèque standard strcmp ( char chaine1[] , char chaine2[]) Retourne 0 si les deux chaînes sont identiques. strcat (char chaineDest[] , char chaineSource[] ) Recopie la chaine chaineSource à la suite de chaineDest. Strnset (char chaine [], char c, int n)  Elle remplace les n premiers caractères d'une chaîne par un caractère donné c. Si n est supérieur à la longueur de la chaîne, la longueur de la chaîne est utilisée à la place de n. Les chaînes de caractères 16
  • 17.
    Exemple Les chaînes decaractères 17 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 Strcat()
  • 18.
    Exemple Les chaînes decaractères 18 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 Strcmp() and strcpy()
  • 19.
    Exemple Les chaînes decaractères 19 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 Strlen()