Académique Documents
Professionnel Documents
Culture Documents
de Safi
1ère année GIM - INFORMATIQUE
LES CHAINES DE
CARACTERES EN C
A.SOULMANI
Type char
c1
char c1 = ‘A’; ‘A’ 1 octet
@2000
c2
char c2 = ‘6’; ‘6’ 1 octet
@2001
c3
char c3 = ‘+’; ‘+’ 1 octet
@2002
Questions:
❑ Comment savoir si un caractère est un chiffre?
❑ Comment savoir si un caractère est une lettre de l’alphabet?
❑ Comment savoir si un caractère est minuscule ou majuscule?
❑ Comment savoir si un caractère est une voyelle?
2
Code ASCII
+32
3
Code ASCII
/* Afficher la valeur du caractère et son code ASCII */
void main()
{
char c = 'a';
printf("Le caractere c est : %c\n",c);
printf("Son code ASCII est : %d\n",c);
}
4
Code ASCII
void main()
{
char c;
printf("saisir un caractere : ");
scanf("%c",&c);
if (c >=97 && c<=122) printf ("minuscule!");
else if (c >=65 && c<=90) printf ("MAJUSCULE!");
else printf("Ce n'est pas un caractere alphabetique!");
}
5
CODE EBCDIC
Conversion
ASCII -- EBCDIC
6
Ordre alphabétique des caractères
❑ La précédence des caractères dans l'alphabet d'une machine est dépendante
du code de caractères utilisé.
Relation de précédence:
▪ Le caractère '0’ a pour code ASCII: 48.
7
Bibliothèque <ctype.h>
❑ Dans la suite, <c> représente une valeur du type int qui peut être
représentée comme caractère.
8
Bibliothèque <ctype.h>
Fonctions de classification
La fonction Retourne une valeur différente de zéro,
isupper(<c>) si <c> est une majuscule ('A'...'Z')
islower(<c>) si <c> est une minuscule ('a'...'z')
isdigit(<c>) si <c> est un chiffre décimal ('0'...'9')
isalpha(<c>) si islower(<c>) ou isupper(<c>)
isalnum(<c>) si isalpha(<c>) ou isdigit(<c>)
isxdigit(<c>) si <c> est un chiffre hexa ('0'...'9' ou 'A'...'F' ou 'a'...'f')
isspace(<c>) si <c> est un signe d'espacement (' ', '\t', '\n', '\r', '\f')
Fonctions de conversion
La fonction Effet
tolower(<c>) retourne <c> converti en minuscule si <c> est une majuscule
❑ 2ème méthode:
char message[6] = {'H','e','l','l','o’};
▪ On a réservé la place pour 6 caractères dont on a initialisé 5.
12 ▪ Le dernier caractère sera par défaut initialisé à 0.
Utilisation de chaîne de caractères
❑ Le spécificateur de format "%s" sera utilisé pour lire ou écrire une
chaîne de caractères.
Lecture et écriture:
void main()
{
char nom[20];
printf("\t Saisir nom : ");
scanf( "%s" ,nom);
printf("\t Bonjour %s",nom);
}
13
Utilisation de chaîne de caractères
Lecture et écriture:
void main()
{
char nom[20];
printf("\t Saisir nom : ");
scanf( "%s" ,nom);
printf("\t Le nom est : %s",nom);
}
❑ On remarque que scanf() a arrêté la lecture au premier espace, ce qui peut poser un
problème dans certaines situations.
❑ Utiliser gets().
/* Utilisation de gets() */
void main()
{
char nom[20];
printf("\t Saisir nom : ");
gets(nom);
printf("\t Le nom est : %s",nom);
14 }
Utilisation de chaîne de caractères
Lecture et écriture:
❑ puts est idéale pour écrire une chaîne constante ou le contenu d'une variable
dans une ligne isolée.
puts(TXT); printf("%s\n",TXT);
15
Chaînes de caractères & Fonctions
Passage de chaîne de caractères en argument
❑ Même méthode que pour les tableaux.
❑ On passe uniquement l’adresse du tableau.
char* nom
17
Opérations sur chaînes de caractères
❑ Copier une chaîne dans une autre.
❑ Connaître la longueur.
❑ Extraire une partie d’une chaîne.
❑ Concaténer plusieurs chaînes.
❑ Comparer des chaînes.
❑ Connaître la position d’un caractère dans une chaîne.
❑ Connaître la position d’une sous-chaîne dans une chaîne.
❑ Remplacer une sous-chaîne par une autre.
❑ Transformer en majuscule ou en minuscule.
❑ Convertir en nombre et vice versa.
❑ … etc.
18
Bibliothèque <string.h>
❑ La bibliothèque string.h fournit des fonctions prédéfinies
permettant de manipuler des chaînes de caractères.
strlen()
Rôle: Renvoie la longueur de la chaîne de caractères passée en argument.
Le caractère ‘\0’ n’est pas comptabilisé.
Exemple:
str ‘H’ ‘e’ ‘l’ ‘l’ ‘o’ ‘\0’ Taille de str est 5.
Prototype:
unsigned int strlen(char[] ou char*);
#include <string.h>
void main()
{
char nom[20];
printf("\t Saisir nom : ");
gets(nom);
printf("\t La taille de nom est : %d",strlen(nom));
19 }
Bibliothèque <string.h>
notreStrlen():
#include <stdio.h>
/* ********************************* */
int notreStrlen(char []);
/* ********************************* */
void main()
{
char nom[30];
printf("\t Saisir nom : ");
gets(nom);
printf("\t La taille de nom est : %d", notreStrlen(nom));
}
/* ********************************* */
int notreStrlen(char c[])
{
int count = 0;
while (c[count] != ‘\0’){
count++;
}
return count;
}
20
Bibliothèque <string.h>
strcpy()
Affectation:
void main()
{
char nom1[20] = "Hello"; ✓ /* Juste */
char nom2[20];
nom2 = nom1; /* Faux */
}
21
Bibliothèque <string.h>
strcpy()
22
Bibliothèque <string.h>
strcmp()
Comparaison de chaînes de caractères
Précédence lexicographique
23
Bibliothèque <string.h>
strcmp()
Comparaison de chaînes de caractères
Précédence lexicographique
Exemples
" ab" précède "ab" car ' '<'a' (le code ASCII de ' ' est 32, et le code ASCII
de 'a' est 97)
24
Bibliothèque <string.h>
strcmp()
25
Bibliothèque <string.h>
Fonction Rôle Valeur de retour
strlen(<s>) fournit la longueur de <s> longueur de <s>
strncat(<s>,<t>,<n>) ajoute au plus <n> caractères de <t> à la fin de <s> @ de la chaîne <s>
▪ Si succès, @ de la première
strchr(<s>,<c>) Cherche le caractère <c> dans la chaîne <s> occurrence de <c> dans <s>.
▪ Si échec, un pointeur nul.
▪ Si succès, @ de la première
occurrence de <s2> dans
strstr(<s1>,<s2>) Cherche la présence de <s2> dans <s1> <s1>.
▪ Si échec, un pointeur nul.
▪ Si succès, @ de la première
Cherche la présence de l’un des caractères <s2>
strpbrk(<s1>,<s2>) occurrence dans <s1>.
dans <s1>
▪ Si échec, un pointeur nul.
26
Bibliothèque <stdlib.h>
❑ La bibliothèque <stdlib> contient des déclarations de fonctions pour
la conversion de chaînes de caractères en nombres et vice-versa.
Fonctions de conversion de chaînes de caractères en nombres
Fonction Rôle
atoi(<s>) retourne la valeur numérique représentée par <s> comme int
atol(<s>) retourne la valeur numérique représentée par <s> comme long
atof(<s>) retourne la valeur numérique représentée par <s> comme double (!)
Déclaration
char tab[4][6];
tab
@2000 1ère chaîne
@2000
2ème chaîne
3ème chaîne
4ème chaîne
tab @2000
@2000 ‘A’ ‘l’ ‘i’ ‘\0’ 1ère chaîne
(tab+1) @2006
@2006
‘A’ ‘m’ ‘a’ ‘l’ ‘\0’ 2ème chaîne
(tab+2) @2012
@2012 ‘S’ ‘a’ ‘m’ ‘\0’ 3ème chaîne
(tab+3) @2018
@2018
‘S’ ‘a’ ‘l’ ‘w’ ‘a’ ‘\0’ 4ème chaîne
❑ tab[i] permet d’accèder à la chaîne numéro (i+1).
void main()
{
char tab[4][6] = {"Ali", "Amal", "Sam", "Salwa"};
int i;
for ( i =0; i < 4; i++ )
printf("Chaine %d :\n\t Valeur: %5s; \t Adresse: %u\n",i+1,tab[i],tab+i);
}
29
Tableau de chaînes de caractères
Accès aux différents caractères
❑ Code ASCII
❑ Déclaration et initialisation de chaînes
❑ Lecture/Ecriture de chaînes
❑ Utilisation de fonctions de la bibliothèque ctype.h
❑ Utilisation de fonctions de la bibliothèque string.h
❑ Utilisation de fonctions de conversion de chaînes de la
bibliothèque stdlib.h
❑ Manipulation de Tableaux de chaînes de caractères
31
Fin();
32