Vous êtes sur la page 1sur 19

Licence d'études fondamentales :

Sciences Mathématiques et Informatiques - SMI / S4 -

M21 – Programmation 2
Chapitre :
Les chaînes de caractères
Pr. Otman ABDOUN
Département Informatique
Faculté Polydisciplinaire, Larache
Année Universitaire : Université Abdelmalek Essaadi
2019 -2020
M21 : Programmation 2
Chaîne de caractères en C

I. Introduction
II. Déclaration et mémorisation
III. Lecture et affichage des chaînes
IV. Fonctions de Traitement des chaînes <string.h>
V. Tableaux des chaines
VI. Pointeurs et les chaines
VII.Exercice d’Application
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 2
Chaîne de caractères :
I- Introduction

• Dans le langage C, il n’existe pas de type spécifique "string" ou "chaine".

• Une chaîne de caractères est traitée comme un tableau de type caractère


"char" à une dimension.

Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 3


Chaîne de caractères :
II- Déclaration et mémorisation
II.1. Déclaration d’une chaîne de caractères :
a. Syntaxe :
char Nom_chaine[longueur] ;
b. Remarques :
• Toute chaîne de caractères se termine par le symbole '\0’.
• Alors pour une chaîne de n caractères, il faudra réserver n+1 emplacements.
c. Exemple : Déclarer une chaîne de caractères "Nom" , pour stocker le nom
d’étudiant dont la longueur est 10 caractères au maximum :
char Nom[11];
// 11 caractères : 10 caractères de la chaîne + 01 : pour le caractère `\0`
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 4
Chaîne de caractères :
II- Déclaration et mémorisation
II.2. Mémorisation d’une chaîne de caractères :
• Le nom de la chaîne est le représentant de l'adresse du premier caractère de la
chaîne.
• Nom_chaine[i] : accéder à l’élément ‘i’ de la chaîne

Exemple :
char CH[4] = "SMI" ;

Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 5


Chaîne de caractères :
III- Lecture et affichage des chaînes
III.1. Lecture d’une chaîne de caractères :
a. Syntaxe :
• scanf avec le format %s permet de lire un mot unique, le nom de la chaîne est le
représentant de l'adresse du premier caractère, il est donc inutile de mettre &. Le
retour à la ligne ou espace est remplacé par ‘\0’ :
scanf("%s" , Nom_chaîne) ;
• gets lit une (ou plusieurs) mots. Le retour à la ligne final est remplacé par ‘\0’:
gets(Nom_chaîne) ;
b. Exemple :
scanf("%s" , Nom);
gets(Ligne);
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 6
Chaîne de caractères :
III- Traitement des chaînes

III.2. Afficher une chaîne de caractères :


a. Syntaxe :
printf("%s" , Nom_chaîne) ;
puts(Nom_chaîne) ;
b. Exemple :
printf("%s\n" , Ligne);
puts(Ligne); // écrit la chaîne "Ligne" et provoque un retour à la ligne.

Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 7


Chaîne de caractères :
III- Lecture et affichage des chaînes
III.3. Exemple :
char Pre[10];
printf("Quel est votre Prénom ? ");
if (scanf("%s", Pre) != 1)
{
printf("Erreur lors de la saisie\n");
return EXIT_FAILURE;
}
printf("Bonjour %s ! \n", Pre);

➔ Quel est votre prénom ? Mohamed


➔ Bonjour Mohamed !
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 8
Chaîne de caractères :
IV- Fonctions de <string.h>
IV.1. Fonction "strlen" :
a. Rôle :
• La fonction retourne le nombre de caractères (Longueur) de chaîne entrée
comme argument.
b. Syntaxe :
var_int = strlen( nom_chaine ) ;
c. Exemple :
int L ;
char Nom[10] ;
L = strlen(Nom) ; // Calculer la longueur de la chaine Nom
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 9
Chaîne de caractères :
IV- Fonctions de <string.h>
IV.2. Fonction "strcpy" :
a. Rôle :
• On ne peut pas en général recopier une chaîne de caractères dans une variable de type chaîne de caractères à
l'aide d'une affectation (sauf lors de la définition) ; il est en revanche possible d'utiliser la fonction strcpy.
b. Syntaxe : Si ChaineCopie et ChaineOriginale sont deux chaines de caractères :
strcpy(ChaineCopie, ChaineOriginale)
• Copie ChaineOriginale dans ChaineCopie (y compris le caractčre \0), en ecrasant l’ancien contenu de la chaine
originale.
c. Exemple :
char Nom[10] = "Saidi" ;
char Nom_complet[20] ;
Nom_complet = Nom ; // On ne peut pas recopier une chaîne dans une autre
strcpy(Nom_complet, Nom) ; // Copier la chaine Nom dans Nom_complet
➔Nom_complet : "Saidi".

Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 10


Chaîne de caractères :
IV- Fonctions de <string.h>
IV.3. Fonction "strcat" :
a. Rôle :
• strcat permet de copier une chaine à la fin d’une autre chaine, en gardant le contenu de la
chaine d’origine.
b. Syntaxe : Si ChaineConcat et FinChaine sont deux chaînes de caractères :
strcat(ChaineConcat, FinChaine)
• Copie FinChaine à la suite (à la fin) de la chaîne ChaineConcat, le premier caractère de
FinChaine venant effacer le caractère ‘\0' final de ChaineConcat.
c. Exemple :
char Nom[10] = "Mohamed"
char Nom_complet[20] = "Saidi" ;
strcat(Nom_complet, Nom) ; // Copier la chaine Nom dans Nom_complet
➔ Nom_complet : "SaidiMohamed"
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 11
Chaîne de caractères :
IV- Fonctions de <string.h>
IV.4. Fonction "strcmp" :
a. Rôle :
• La fonction strcmp compare les deux chaînes de caractères indiquées comme arguments.
b. Syntaxe : Si Ch1 et Ch2 sont deux chaînes de caractères et var_int une variable entière pour
recevoir la valeur retournée :
var_int = strcmp(Ch1, Ch2) ;
• Compare Ch1 et Ch2, puis la fonction strcmp retourne une valeur pour var_int :
• si les chaines sont identiques, la fonction retourne 0 ;
• si la première précède la seconde selon l'ordre lexicographique, la fonction retourne une valeur négative ;
• Sinon, la fonction retourne une valeur positive.
c. Exemple :
char Ch1[20] = "Ahmed" ;
char Ch2[20] = "Ahmed" ;
int var_int = strcmp(Ch1, Ch2) ; // Comparer les deux chaines Ch1 et Ch2
➔ var_int = 0
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 12
Chaîne de caractères :
IV- Fonctions de <string.h>
IV.5. Fonction "strrev" :
a. Rôle :
• Cette fonction permet d'inverser l'ordre de chacun des caractères de la chaine
de caractères.
b. Syntaxe : Si Nom_chaine est la chaîne de caractères à inverser :
char * strrev( Nom_chaine );
c. Exemple :
char Ch [10] = “SMI" ;
printf(" Chaîne inversée : %s", strrev(Ch) ) ;
➔ Chaîne inversée : IMS
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 13
Chaîne de caractères :
V- Tableaux des chaines
V.1. Déclaration, initialisation, mémorisation :
a. Syntaxe :
char Tab_chaine[L][C];
Réservation d’un espace en mémoire pour L chaînes de caractères, contenant C
caractères (C-1 significatifs).
b. Exemple :
char jour[7][9]={"lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"};

Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 14


Chaîne de caractères :
V- Tableaux des chaines
V.2. Accéder aux différentes lignes du Tableau des chaines :
• Pour accéder aux différentes chaînes de caractères d'un tableau, il faut indiquer la ligne ciblée.
Tab_chaine [i]
Réservation d’un espace en mémoire pour L chaînes de caractères, contenant C caractères (C-1
significatifs).
b. Exemple :
char
semaine[7][9]={"Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"};
printf("Aujourd'hui, c'est %s ! \n",semaine[2]);
➔ Aujourd'hui, c'est Mercredi!
semaine[i] représente l'adresse du premier élément de la chaîne i, on ne peut donc modifier une telle
adresse par une affectation du type simple :
semaine[6]=" Sunday";
• On doit utiliser la fonction strcpy(semaine[6]," Sunday");
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 15
Chaîne de caractères :
VI- Pointeurs et les chaines
VI.1. Déclaration et Allocation dynamique d’une chaîne :
a. Syntaxe :
char *Nom_chaine;
Nom_chaine = (char*) malloc(L);
• Nom_chaine est une chaîne dynamique, de longueur L-1 caractères et le caractère ‘\0’.
b. Parcourir une chaine :
Parcours par itération :
int i ;
for( i = 0 ; CH[i] != ‘\0’ ; i ++)
Parcours par Pointeur :
char *P ;
for( P = CH ; *P != ‘\0’; P ++)
Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 16
Chaîne de caractères :
VI- Pointeurs et les chaines
VI.2. Déclaration et Allocation dynamique des tableaux des chaînes :
a. Syntaxe :
char **Liste_chaines;
char **P;
Liste_chaines = (char**) malloc( L * sizeof(char *) );
for( P = Liste_chaines ; P < Liste_chaines+L ; P++ )
*P = (char *) malloc( C + 1 );
• Liste_chaines est tableaux de L chaîne, chacune a une longueur maximale de C caractères.
b. Exemple : Un tableau des chaines "Sem", pour les jours de la semaine avec une dimension de colonnes variantes :

Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 17


Chaîne de caractères :
VII- Exercice d’Application : Énoncé
Écrire un programme qui lit une liste des noms des étudiants, chaque nom est composé de deux
chaînes de caractères Nom et Prenom, puis il calcul la longueur de chaque chaine lue, ensuite
copier la chaine Nom et Prenom dans la ligne ciblée du tableau des chaines Liste.
Exemple :
Nom de l’étudiant i : Saidi
Prénom de l’étudiant i : Mohamed
Nom Complet de l’étudiant i : Saidi Mohamed

Finalement, le programme permet d’unifier l’écriture de tous les noms complet générés en
convertissant le Nom en Majuscule et le Prénom en Minuscule sauf le premier caractère en
Majuscule ?
Exemple :
Nom Complet de l’étudiant j : Chahboun aHmed → CHAHBOUN Ahmed

Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 18


Chaîne de caractères :
VII- Exercice d’Application : Résultats

Pr. Otman ABDOUN M21. Programmation 2 SMI – S4 | 22 Mars 2020 | 19

Vous aimerez peut-être aussi