Académique Documents
Professionnel Documents
Culture Documents
Module: M6 - LFSMI - S4
Prof. R. HANNANE
r.hannane@uca.ma
Introduction
Récapitulatif sur le type char
Introduction
Récapitulatif sur le type char
La table ASCII fait la conversion entre les nombres et les
lettres
Introduction
Récapitulatif sur le type char
Chaı̂ne de caractère
Introduction
Chaı̂ne de caractère
Introduction
Problème:
Comme il n’existe pas de variables de type chaı̂ne
⇒ Il faudra prévoir un emplacement pour accueillir ces
informations
Solution:
I Un tableau de caractères
Chaı̂ne de caractère
Chaı̂ne et tableaux
Une chaı̂ne de caractères n’est rien d’autre qu’un tableau de
type char
char chaine [7];
Chaı̂ne de caractère
Chaı̂ne et tableaux
Bonne déclaration et initialisation:
char chaine[8]={’e’,’x’,’e’,’m’,’p’,’l’,’e’,’\0’};
char chaine[10]={’e’,’x’,’e’,’m’,’p’,’l’,’e’,’\0’};
char chaine[]={’e’,’x’,’e’,’m’,’p’,’l’,’e’,’\0’};
char chaine[8]=”exemple”;
char chaine[10]=”exemple”;
char chaine[]=”exemple”;
Attention au mouvaise déclaration et initialisation:
char chaine[5]={’e’,’x’,’e’,’m’,’p’,’l’,’e’,’\0’};
char chaine[5]=”exemple”;
char chaine[8];
chaine=”exemple”;
Prof. R. HANNANE (FSSM) Programmation II 10 / 38
Les chaı̂nes de caractères
Chaı̂ne de caractère
Chaı̂ne et tableaux
Chaı̂ne de caractère
Chaı̂ne et pointeurs
Chaı̂ne de caractère
Chaı̂ne et pointeurs
Bonne déclaration:
char *chaine = ”exemple”;
chaine = ”example”;
Attention:Mouvaise déclaration
char *chaine[] = ”exemple”;
char *chaine;
*chaine = ”example”;
Chaı̂ne de caractère
Affichage et lecture des Chaı̂nes
Pour une chaı̂ne de caractères, on peut parcourir la
chaine et afficher caractère par caractère en utilisant le
spécificateur de format”%c”
En langage C, on peut simplement utiliser le spécificateur de
format ”%s” pour afficher toute la chaine exclus le
caractère ’\0’
char chaine [] = " exemple " ;
printf ( " % c " , chaine [3]); // m
printf ( " % s " , chaine ); // exemple
Exemple 3:
char prenom [20] ;
printf ( " Veuillez saisir votre prenom : " );
scanf ( " % s " , prenom );
printf ( " Bonjour % s " , prenom );
Chaı̂ne de caractère
Affichage et lecture des Chaı̂nes
Problème:
Et si la chaine saisie par l’utilisateur contien le
caractère d’espacement, ex: Mohammed Reda, Fatima
Ezzahra, Jean Pierre,...???
⇒ Le scanf() ne stocke pas le caractère d’espacement dans
la variable de chaine de caractères
⇒ C’est juste la premiere partie qui va être stockée
Solution:
La fonction gets() permet de lire toute la ligne d’entrée
y compris des espaces
En plus, elle n’a pas besoin d’ajouter le spécificateur de
format ”%s”
Prof. R. HANNANE (FSSM) Programmation II 15 / 38
Les chaı̂nes de caractères
Chaı̂ne de caractère
Affichage et lecture des Chaı̂nes
Note:
Avec le code ”%s” de scanf, on utilise les délimiteurs habituels
(l’espace ou la fin de ligne).
⇒ Le caractère délimiteur n’est pas consommé :
il reste disponible pour une prochaine lecture
Chaı̂ne de caractère
Affichage et lecture des Chaı̂nes
Exemple 4:
char prenom [20] ;
printf ( " Veuillez saisir votre prenom : " );
gets ( prenom ); // scanf ("%[^\ n ]%* c " , prenom );
printf ( " Bonjour % s \ n " , prenom );
printf ( " Les 3 premier caract è res de votre prenom
sont %.3 s \ n " , prenom );
Chaı̂ne de caractère
Affichage et lecture des Chaı̂nes
Exemple 5:
char prenom [20] ;
printf ( " Veuillez saisir votre prenom : " );
gets ( prenom );
puts ( prenom ); // printf ("% s \ n " , prenom );
Chaı̂ne de caractère
Affichage et lecture des Chaı̂nes
Exemple 6:
# include < stdio .h >
int main ()
{
char nom [20] , prenom [20] , ville [25] ;
printf ( " Quelle est votre ville : " ) ;
gets ( ville ) ;
printf ( " Donnez votre nom et votre pr é nom : " ) ;
scanf ( " % s % s " , nom , prenom ) ;
printf ( " Bonjour % s % s qui habitez à " , prenom , nom ) ;
puts ( ville ) ;
return 0;
}
/*
Quelle est votre ville : Marrakech
Donnez votre nom et votre pr é nom : Rachidi Ilyass
Bonjour Rachidi Ilyass qui habitez à Marrakech
*/
Chaı̂ne de caractère
Affichage et lecture des Chaı̂nes
Remarques:
Les fonctions printf et scanf permettent de lire ou d’afficher
simultanément plusieurs informations de type quelconque. En
revanche, gets et puts ne traitent qu’une chaı̂ne à la fois
Chaı̂ne de caractère
Affichage et lecture des Chaı̂nes
Remarques:
La fonction gets fournit en résultat soit un pointeur sur la chaı̂ne lue
(c’est donc en fait la valeur de son argument), soit le pointeur nul en
cas d’anomalie
Chaı̂ne de caractère
Pour fiabiliser la lecture au clavier : le couple gets sscanf
Chaı̂ne de caractère
Pour fiabiliser la lecture au clavier : le couple gets sscanf
Chaı̂ne de caractère
Pour fiabiliser la lecture au clavier : le couple gets sscanf
Exemple 7:
# include < stdio .h >
# define LG 80
int main ()
{ int n , compte ;
char c ;
char ligne [ LG +1] ;
do {
printf ( " Donnez un entier et un caract è re : " ) ;
gets ( ligne ) ;
compte = sscanf ( ligne , " % d % c " , &n , & c ) ;
} while ( compte < 2 ) ;
printf ( " merci pour % d % c \ n " , n , c ) ;
return 0;}
/*
Donnez un entier et un caract è re : abcd
Donnez un entier et un caract è re : a 125
Donnez un entier et un caract è re : 12 bonjour
merci pour 12 b
*/
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Exemple 8:
# include < stdio .h >
# include < string .h >
int main ()
{
char chaine [] = " Bonjour les SMI4 " ;
int taille =0;
taille = strlen ( chaine );
printf ( " La chaine \" % s \" fait % d caracteres de long " ,
chaine , taille );
return 0;
}
/* Affichage :
La chaine " Bonjour les SMI4 " fait 16 caracteres de long
*/
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Exemple 9:
# include < stdio .h >
# include < string .h >
int main (){
char chaine1 [] = " Bonjour les SMI4 " ;
char chaine2 [50];
char chaine3 [50];
strcpy ( chaine2 , chaine1 );
puts ( chaine2 );
strncpy ( chaine3 , chaine1 ,6);
puts ( chaine3 );
return 0;
}
/* Affichage :
Bonjour les SMI4
Bonjou
*/
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Exemple 10:
# include < stdio .h >
# include < string .h >
int main (){
char chaine1 [] = " Bonjour " ;
char chaine2 []= " les SMI4 " ;
char chaine3 []= " 2022/2023 " ;
strcat ( chaine1 , chaine2 );
puts ( chaine1 );
puts ( chaine2 );
strncat ( chaine1 , chaine3 ,5);
puts ( chaine1 );
return 0;}
/* Affichage :
Bonjour les SMI4
les SMI4
Bonjour les SMI4 2022
*/
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Exemple 11:
# include < stdio .h >
# include < string .h >
int main (){
char ch1 [] = " Ali " ;
char ch2 [] = " Ali " ;
char ch3 [] = " ali " ;
char ch4 [] = " Ahmed " ;
printf ( " % d \ n " , strcmp ( ch1 , ch2 )); // 0
printf ( " % d \ n " , strcmp ( ch1 , ch3 )); // -1 ou -32
printf ( " % d \ n " , strcmp ( ch1 , ch4 )); // 1 ou 4
return 0;
}
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Exemple 12:
# include < stdio .h >
# include < string .h >
int main (){
char ch1 [] = " Bonjour les SMI4 " ;
printf ( " % s \ n " , strchr ( ch1 , ’j ’ )); // jour les SMI4
char * ch2 = strchr ( ch1 , ’o ’ );
printf ( " % s \ n " , ch2 ); // onjour les SMI4
printf ( " % s \ n " , strrchr ( ch1 , ’o ’ )); // our les SMI4
return 0;
}
Chaı̂ne de caractère
Les fonctions de manipulation de chaı̂ne
Exemple 13:
# include < stdio .h >
# include < string .h >
int main (){
char ch1 [] = " Bonjour les SMI4 " ;
printf ( " % s \ n " , strstr ( ch1 , " jour " )); // jour les SMI4
char * ch2 = strstr ( ch1 , " on " );
printf ( " % s \ n " , ch2 ); // onjour les SMI4
return 0;
}
Chaı̂ne de caractère
Généralités sur les fonctions portant sur des chaı̂nes
Chaı̂ne de caractère
Généralités sur les fonctions portant sur des chaı̂nes
Chaı̂ne de caractère
En résumé
Le type char est utilisé pour stocker
un et un seul caractère. Il stocke en réalité un nombre mais
ce nombre est automatiquement traduit par l’ordinateur à
l’affichage grâce à la table ASCII
En C, il n’existe pas d’opérateur ou de mot-clefs réservés
pour le traitement d’une suite de caractères ”chaines de
caracteres”. ⇒ Pour cela, on utilise un tableau de char
ou un pointeur de char
Toute chaı̂ne de caractère se termine par un caractère
spécial appelé ’\0’ qui signifie ”fin de chaı̂ne”
Il existe de nombreuses fonctions toutes prêtes de
manipulation des chaı̂nes dans la bibliothèque string. Il
faut inclure string.h pour pouvoir les utiliser
Prof. R. HANNANE (FSSM) Programmation II 38 / 38