Chapitre 7 Les Chaînes de Caractères: Objectifs
Chapitre 7 Les Chaînes de Caractères: Objectifs
1 2
Objectifs
ASD II
1 2
3 4
Plan Introduction
1) Introduction
Le type de données chaine de caractères est manipulé comme un tableau
2) Définition & Déclaration de caractères mais il diffère dans la déclaration.
3) Opérations sur les chaînes Nous allons détailler dans cette partie:
4) Fonctions & Opérations prédéfinies La declaration
5) Tableaux de chaînes de caractères La manipulation
6) Conclusion Quelques exemples d’utilisation
ASD II ASD II
3 4
9/17/2023
5 6
Définition-Déclaration Définition-Déclaration (suite)
Exemple:
Une chaîne de caractère: Pour représenter la chaîne de caractères " bonjour ", un tableau de huit caractères est
Est une structure de données homogène, défini:
char ch[8] = {‘b’, ’o’, ’n’, ’j’, ’o’, ’u’, ’r’, '\0'}; ch: ‘b’ ‘o’ ‘n’ ‘j’ ‘o’ ‘u’ ‘r’ ‘\0’
Permet le stockage, dans une même variable, un nombre fini d'éléments de types caractères.
Ou
C’est un tableau de caractères qui se termine par le caractère ‘\0’ (En C, NULL). char ch[8] ="bonjour";
Syntaxe:
En Algorithme En C
En Algorithme En C var : ch : chaine[50] //déclaration d’une chaine sans
//chaine de 49 caractères + caractère de fin de initialisation
var : nom_chaine: chaine[taille] char nom_chaine [taille]; // taille connue chaine ‘\0’ char ch[50];
//déclaration d’une chaine avec
initialisation
char nom[20]= {‘a’, ‘l’, ‘i’, ‘\0’};
ASD II ASD II
char ch1[10]=‘’cours’’;
5 6
7 8
Opérations sur les chaines Opérations sur les chaines (suite)
Pour accéder à une case d'une chaine donnée, il faut utiliser: Toutes les opérations élémentaires peuvent être appliquées sur une chaine de caractères.
Exemple : En Algorithmique En C
le nom (identificateur) de la variable, et
//lire en bloc la chaine "nom"
le numéro de la case.
lire(nom) scanf ("%s", nom) ; ou gets (nom) ;
nomChaine [indice] //afficher en bloc la chaine "nom"
écrire(nom) printf("%s", nom) ; ou puts (nom) ;
7 8
9/17/2023
9 10
Remarques en C Remarques en C (suite)
L’affichage d’une chaine de caractères peut être fait en bloc ou bien caractère par Exemple2: Affichage d’une chaine en bloc
caractère.
void main()
{
Exemple1: Affichage d’une chaine caractère par caractère char ch1[20] ; //déclartion d'une chaine de taille max=20
void main()
printf("donner une chaine :") ;
{
char ch[20]="cours programmation"; /* déclaration d'une chaine initialisée*/ scanf("%s", ch1) ; //ou gets(ch1) ; // Saisie d'une chaine
9 10
11 12
Fonctions et opérations prédéfinies Les opérateurs en Algorithme
ASD II ASD II
11 12
9/17/2023
13 14
Les opérateurs en Algorithme (suite) Les fonctions en Algorithme
Ajout d'un caractère (°) : permet d'ajouter un caractère à droite ou à gauche d'une chaine longueur (chaine) : renvoie le nombre de caractère d'une chaine sans le caractère de fin de la
définie. chaine ’\0’.
Exemple : Exemple :
var : ch1 : chaine[20] // déclaration de ch1 var : ch : chaine[10]
ch1←"onjou" // initialiser ch1 à la chaine "onjou " L : entier
ch1←'B' ° ch1 // Ajouter le caractère ‘B’ à gauche de ch1 ……
écrire (ch1) // afficher le contenu de ch1 "Bonjou" ch←"bonjour"
ch1← ch1 ° ‘r’ // Ajouter le caractère ‘r’ à droite de ch1 L ← longueur(ch)
écrire (ch1) // afficher le contenu de ch1 "Bonjour" écrire("longueur de ch=", L) L=7
ASD II ASD II
13 14
15 16
Les fonctions en Algorithme (suite) Les fonctions en Algorithme (suite)
souschaine(chaine, position, n) : renvoie une sous-chaine (extrait de la chaine), de n gauche(chaine, n) : renvoie les n caractères les plus à gauche dans une chaine.
caractères, à partir d’une position donnée. Exemple:
Exemple : var : mot, ch : chaine[255]
var : mot, ch : chaine[255] …..
…… mot ← "bonjour"
mot ← "bonjour" ch ← gauche(mot, 3) "bon"
ch ← souschaine(mot, 1, 3) "onj"
ASD II ASD II
15 16
9/17/2023
17 18
Les fonctions en Algorithme (suite) Les fonctions en Algorithme(suite)
droit(chaine, n) : renvoie les n caractères les plus à droite dans une chaine. trouve(chaine1, chaine2):
Exemple : renvoie la position de chaine2 dans chaine1.
var : mot, ch : chaine[255] renvoie 0 si chaine 2 n'existe pas dans chaine 1.
……. Exemple :
var : ch1, ch2 : chaine[255]
mot ← "bonjour"
x : entier
ch ← droit(mot, 4) "jour"
…..
ch1 ← "bonjour"
ch2 ← "jour"
x ← trouve (ch1, ch2) // x = 3
ASD II ASD II
17 18
19 20
Les fonctions en C Les fonctions en C (suite)
Toutes les fonctions de manipulation des chaines de caractères en C nécessitent l’utilisation de strcpy (chaine2, chaine1) : permet de copier chaine1 vers chaine2
Exemple:
la bibliothèque « string.h »
char ch1[20], ch2[20];
strlen(ch) : renvoie le nombre de caractère de la chaine « ch » sans le caractère fin de la ch1= "bonjour" ;
chaine ’\0’. strcpy (ch2, ch1);
puts (ch2); // bonjour
Exemple:
strncpy (chaine2, chaine1,n) : permet de copier n caractères de chaine1 vers chaine2
char ch[10] = "bonjour"; Exemple:
char ch1[20], ch2[20];
int L;
ch1= "bonjour" ;
L= strlen(ch); strncpy (ch2, ch1, 3);
printf ("ch2=%s", ch2); // "bon"
printf("longueur ch=%d", L); /* longueur ch= 7 */ ASD II ASD II
19 20
9/17/2023
21 22
Les fonctions en C(suite) Les fonctions en C(suite)
strcat (chaine1, chaine2) : Ajoute chaine2 à la fin de chaine1 strcmp(chaine1, chaine2): permet de comparer lexicographiquement deux chaines: chaine1 et
Exemple: chaine2. La fonction retourne R:
char ch1[20] = "bon"; R=0 si chaine1 == chaine2
char ch2[20] = "jour";
strcat(ch1, ch2); R<0 si chaine1 précède chaine2
puts(ch1); // “bonjour” R>0 si chaine1 suit chaine2
Exemple:
strncat (chaine1, chaine2, n) : copier n caractères de la chaîne chaine2 à la fin de la chaîne1
(même le caractère ‘\0’) char ch1[20], ch2[20];
Exemple: int res;
char ch1[20] = "bonjour"; ch1= "bon"; ch2= "jour";
char ch2[20] = "monsieur";
res=strcmp(ch1, ch2);
strncat(ch1, ch2, 2);
printf(" ch1=%s", ch1); // ch1 = “bonjourmo” ASD II printf("%d", res); // res = -1 ASD II
21 22
23 24
Activité1 Les tableaux de chaines de caractères
Un tableau de chaines de caractères est un tableau dont chaque élément est une chaine. Chaque case
Ecrire un algorithme (programme C) qui permet d’afficher les caractères contient ainsi un tableau de caractères.
d’une chaine dans l’ordre inverse Tableau à deux dimensions de caractères.
Exemple: entrée: "bonjour" sortie: "ruojnob" Déclaration:
Exemples:
char JOUR [7] [9]= {"lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"};
7 chaines de longueur max 9 caractères
char MOIS [12][6]= {"jan", "fev", "mars","avr", "may", "juin","juil","aout", "sep", "oct","nov", "dec"};
12 chaines de longueurs 6 caractères
ASD II ASD II
23 24
9/17/2023
25 26
Les tableaux de chaines de caractères(suite) Conclusion
Exemple : char JOUR [7] [9]= {"lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"};
Dans ce chapitre nous avons :
char MOIS [12][6] = {"jan", "fev", "mars","avr", "may", "juin","juil","aout", "sep", "oct","nov", "dec"};
Présenté la définition et la déclaration d’une chaine de caractères
Afficher une chaine :
printf("%s", JOUR[2]) permet d’afficher "mercredi" Détailléles différentes fonctions prédéfinies en algorithme et en C pour
printf("%s", MOIS[0]) permet d’afficher "jan" la manipulation des chaines de caractères
Afficher des caractères : Manipulé les tableaux de chaines de caractères
for (i=0 ;i<7 ;i++)
printf("%c", JOUR[i][0]) ; permet d’afficher le premier caractère de chaque chaine
Affectation : pas d’affectation directe
JOUR [4] = "vendredi" ; => Utiliser strcpy : strcpy(JOUR[4], "vendredi") ;
ASD II ASD II
25 26