Vous êtes sur la page 1sur 26

C CHAPITRE 6 : LES CHAINES DE CARACTERES

1. Définition
2. Déclaration
3. Initialisation
4. Opérations I/O
5. Fonctions de string.h
6. Fonctions de stdlib.h
7. Fonctions de ctype.h
2023-2024
1
Les chaînes de caractères

C 1. Déclaration d’une chaîne de caractères


• Syntaxe :
char Nom_de_chaine[nb_elements] ;

N.B : Pour une chaîne de n caractères, il faut réserver n+1 octets

• De même que pour les tableaux de chiffres, le nom de la chaîne est le représentant de
son adresse mémoire (plus précisément le représentant de l'adresse du premier
caractère)
• Pour afficher l’adresse du 1er caractère : printf("%p",NomChaine)
• Exemple :
Voici la mémorisation de la chaîne "BONJOUR!"

2 2023-2024
Les chaînes de caractères

C 1. Déclaration d’une chaîne de caractères

• Remarque
'a' Vs "a"

'a' "a"
'a' : est un caractère constant, qui a "a": est un tableau de caractères qui
le code ASCII 97 contient deux caractères, la lettre 'a'
et le caractère NULL: '\0'
'a' : est codé sur un octet
"a" : est codé sur deux octets

3 2023-2024
Les chaînes de caractères

C 2. Initialisation d’une chaîne de caractères


Syntaxe :
char Nom_du_chaine[nb_elements] = "chaine";

• Les chaînes de caractères sont indiquées entre guillemets.


• La chaîne de caractères vide est donc : ""

Exemple1:
char ch[]="Programmation";
 Réservation automatiquement du nombre d'octets nécessaires pour la chaîne ch

Exemple2 :
char C[]="Ce texte\n s'écrira sur \n trois lignes"

4 2023-2024
Les chaînes de caractères

C 3. Lecture/écriture d'une chaîne de caractères

Le langage C offre plusieurs possibilités de lecture ou d'écriture de


chaînes :

• l'utilisation du code de format %s dans les fonctions printf et scanf

• les fonctions spécifiques de lecture gets ou d'affichage puts d'une


chaîne (une seule à la fois).

5 2023-2024
Les chaînes de caractères

C 3. Lecture/écriture d'une chaîne de caractères

Exemple 1 :
#include<stdio.h>
#include<stdio.h>
void main() void main()
{ {
char ch[100]; char ch[100];
printf("donner une puts("donner une
chaine"); chaine");
scanf("%s",ch); gets(ch);
printf("%s",ch);
} puts(ch);
}

6 2023-2024
Les chaînes de caractères

C 3. Lecture/écriture d'une chaîne de caractères

Exemple 2:
#include<stdio.h>
void main()
{
char nom[70],prenom[70];
printf("Donner votre nom et pr%cnom",130);

scanf("%s%s",nom,prenom); gets(nom);
gets(prenom);

printf("votre nom :%s\n votre puts("votre nom");


prénom:%s\n",nom,prenom); puts(nom);
puts("votre prénom");
puts(prenom);
}

7 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strlen Introduction
strlen : calcule la longueur d’une chaîne sans compter le ‘\0’ et
retourne un entier.
• Exemple
char ch[]="Bonjour";
int l=strlen(ch);
printf("La longueur de ch = %d",l);
• Equivalent sans strlen

int i;
for(i=0;ch[i];i++);
printf("La longueur de ch sans strlen = %d",i);

8 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strcpy Introduction

ch_destination = chaine_source

• Pour le faire, il faut bien copier la chaîne caractère par


caractère ou utiliser la fonction

strcpy ( destination , source )

• Copie le contenu de source dans destination tout en gardant les


adresses fixes.
• Le ‘\0’ est copié systématiquement
• La fonction strcpy n’affecte pas la chaîne source
9 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strcpy Introduction

Exemple
char ch1[100],ch2[100];
strcpy (ch1,"bonjour") ;
strcpy (ch2,"Au revoir") ;
strcpy (ch2,ch1) ;

NB. Les lettres sont indiquées juste pour simplifier (normalement en code ASCII)
b o n j o u r \0
ch1 Adresses
101 102 103 104 105 106 107 108 mémoires
b
A o
u n jr o
e u
v ro \0
i r \0

ch2 300 301 302 303 304 305 306 307 308 309

10 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strcpy Introduction

Activité : Ecrire le code de la fonction strcpy

int i,j;
char ch1[]="Bonjour",
ch2[]="Au revoir";
for(i=0,j=0;ch1[i];i++,j++)
ch2[j]=ch1[i];
ch2[j]='\0';

11 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strncpy Introduction

strncpy ( destination , source , n )


copie au maximum les n premiers caractères de la chaîne source dans
la chaîne destination
• Le ‘\0’ n’est pas copié
• La chaîne source n’est pas affectée
Exemple 1
ch2[100]="Au revoir";
strncpy (ch2,ch1,3)
B o n r
;e v o i r \0

300 301 302 303 304 305 306 307 308 309
ch2
12 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strncpy Introduction
Exemple 2

Exécution

Saisir une chaine : bon =>


Saisir une chaine : bonjour =>
13 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strcmp Introduction

strcmp ( ch1 , ch2 )


compare ch1 et ch2 lexicographiquement et fournit un résultat:
 < 0 si ch1 précède ch2 (Ex: strcmp("ba","bb"))
 = 0 si ch1 est égal à ch2 (Ex: strcmp("aa", "aa"))
 > 0 si ch1 suit ch2 (Ex: strcmp("ba","ab"))
• La vérification entre les 2 chaînes se fait caractère par caractère
jusqu’à un NULL ou un caractère différent est rencontré
• La valeur retournée (> 0 ou < 0) représente la différence entre les
codes ASCII des premiers caractères différents dans les 2 chaînes

14 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h Introduction

La comparaison lexico-grahique veut dire caractère par caractère où


:

• 'a' < 'b' < 'c' <....< 'z'


• 'A' < 'B' < 'C' <....< 'Z’
• Space < '0' < '1' < ....< '9' < 'A' < 'B' < 'C' <....< 'Z'< 'a' < 'b' < 'c' <....< 'z'
• "aabb" < "abbb"
• "AAA" < "aaa"
• …

15 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strcmp Introduction

Activité : Afficher le résultat de comparaison des chaînes ch1 et ch2

char ch1[]="Bonjour",ch2[]="Au revoir";


if(strcmp(ch1,ch2))
if (strcmp(ch1,ch2)<0)
printf("%s précéde %s",ch1,ch2);
else
printf("%s suit %s",ch1,ch2);
else
printf("%s égale à %s",ch1,ch2);
printf("\nstrcmp(%s , %s) = %d",ch1,ch2, strcmp(ch1,ch2));
16 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strncmp Introduction

strncmp ( ch1 , ch2 , n)


compare au maximum les n premiers caractères de ch1 et ch2
lexicographiquement et fournit un résultat:
 < 0 (Ex: strncmp("baaa","bbaa",3))
 = 0 (Ex: strncmp("baab","baaa",3))
 > 0 (Ex: strncmp("bbaa","baaa",3))

• La vérification entre les 2 chaînes se fait caractère par caractère jusqu’à un


NULL ou un caractère différent est rencontré avant l’atteinte de n
caractères, ou bien n caractères sont appariés.
• La valeur retournée (> 0 ou < 0) représente la différence entre les codes
17 ASCII des premiers caractères différents
2023-2024 dans les 2 chaînes
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strncmp Introduction

Réflexions :
char ch1[]="abcdef",ch2[]="abc";
printf("\nstrncmp(%s , %s, %d) = %d",ch1,ch2, 5,
strncmp(ch1,ch2,5));
printf("\nstrncmp(%s , %s, %d) = %d",ch2,ch1, 5,
strncmp(ch2,ch1,5));

18 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : stricmp et Introduction
strnicmp

stricmp ( ch1 , ch2 )


compare les contenus de ch1 et ch2 sans tenir compte de la casse,
Exemple 1 : stricmp("aa","AA") => 0

strnicmp ( ch1 , ch2, n )


compare comme strncmp mais sans tenir compte de la casse,
Exemple 2 : strnicmp("aa","Aa",1) => 0

19 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strcat Introduction

strcat ( destination , source )


recopie la chaîne source à la fin de la chaîne destination.

La fonction strcat copie chaque caractère de la chaîne source, un à


un, à la suite du contenu de la chaîne destination, et ce jusqu'à
atteindre '\0'. '\0’ sera lui aussi copié.

Exemple
char ch1[10]="Bon",ch2[10]="soir";
strcat (ch1,ch2);

20 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strncat Introduction

strncat ( destination , source , n )


recopie au maximum les n premiers caractères de la chaîne source
dans la chaîne destination

'\0' sera ajouté automatiquement à la fin de destination (même si la


limite du nombre de caractères est atteinte)
Exemple
char ch1[10]="Bon",ch2[10]="soir";
strncat (ch1,ch2,1);

21 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strstr Introduction
strstr ( ch , sch)
• Recherche la première occurrence d’une sous-chaine sch dans la
chaîne principale ch
• Si la sous-chaîne sch est trouvée dans ch, la fonction strstr renvoie
un pointeur visant sa première occurrence. Dans le cas contraire, la
fonction strstr renvoie un pointeur nul (NULL)
Exemple
char ch1[10]="Bonsoir",ch2[10]="soir";
if (strstr( ch1,ch2 ) == NULL )
printf ( " %s ne contient pas %s ", ch1, ch2);
else
22 printf( " %s contient %s ", ch1, ch2 );
2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
4.Bibliothèque string.h : strchr Introduction
strchr( ch , char)
• Recherche la première occurrence du caractère char dans la chaîne
de caractères ch
• Si le caractère char est trouvé dans ch, la fonction strchr renvoie un
pointeur sur sa première occurrence. Dans le cas contraire, la fonction
strchr renvoie un pointeur nul (NULL)
Exemple
char c =‘f’,ch[5]="soir";
if ( strchr( ch,c ) == NULL )
printf ( " %s ne contient pas %c ", ch, c);
else
23 printf( " %s contient %s ", ch, c );
2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
5.Les fonctions de stdlib.h Introduction
La bibliothèque <stdlib> contient des déclarations de fonctions pour
la conversion de nombres en chaînes de caractères et vice-versa
Exemple

Règles générales pour la conversion:

• Les espaces au début d'une chaîne sont ignorés


• Pour une chaîne non convertible, les fonctions retournent zéro

24 2023-2024
Les chaînes de caractères

C Tableau unidimentionnel
6.Les fonctions de ctype.h Introduction
• Les fonctions de <ctype> servent à classifier et à convertir des caractères.
• Les symboles (é, è, ä, ü, ß, ç, ...) ne sont pas considérés.
• Les fonctions de <ctype> sont indépendantes du code de caractères de la
machine et favorisent la portabilité des programmes.
• Dans la suite, c représente une valeur du type int qui peut être représentée comme
caractère.

isupper(c); /* retourne une valeur différente de 0 si c est une majuscule */


islower(c); /* retourne une valeur différente de 0 si c est une minuscule */
isspace(c); /* retourne une valeur différente de 0 si c est un espace */

• Les fonctions de conversion suivantes fournissent une valeur du type int qui peut
être représentée comme caractère; la valeur originale de c reste inchangée:

tolower(c); /* retourne c converti en minuscule si c est majuscule */


toupper(c); /* retourne c converti en majuscule si c est minuscule */
25 2023-2024
Les chaînes de caractères

C Tableau
7.Activités unidimentionnel Introduction
Activité 1
Ecrire un programme en langage C qui permet de :
• lire 5 chaînes de caractères et les stocker dans un tableau
• saisir une autre chaîne de caractères
• chercher si la chaîne saisie existe parmi les chaînes du tableau

Activité 2
Lire une chaîne et un caractère et afficher le nombre d’occurrence du
caractère dans la chaîne saisie

26 2023-2024

Vous aimerez peut-être aussi