Vous êtes sur la page 1sur 27

Ch4

Les chaînes de caractères

SM-SMI3 1
1) Tableaux de caractères(chaînes de caractères)
Soit le tableau suivant :
char nom[10];
nom[0] désigne le premier caractère…
Ce genre de variable s'appelle variable chaîne de caractères
Un tableau de caractères se termine par le caractère '\0'.
Il désigne la fin de la chaîne.

SM-SMI3 2
2) Lecture et affichage des chaînes de caractères
 gets(ch) lit une chaîne et l'affecte à ch.
 puts(ch) affiche la chaîne ch.
 scanf("%s",ch) lit une chaîne et l'affecte à ch.
 printf("%s",ch) affiche la chaîne ch.

SM-SMI3 3
 Exemple
#include <stdio.h>
main()
{
char nom[10], prenom[10];
printf("donner le nom");
gets(nom);
printf("donner le prenom");
gets(prenom);
printf("vous avez saisi %s %s",nom, prenom);
}

SM-SMI3 4
3- Les chaînes constantes littérales
Les constantes littérales de chaînes de
caractères sont délimitées par des quôtes ""
Exemple
"salam"

SM-SMI3 5
 Les éléments d'une chaîne
Chaque élément d'une chaîne est un caractère
(i.e. écrit entre apostrophes)
char x[10]="salam";
x[0] contient le caractère 's',
x[1] contient le caractère 'a',

x[5] contient le caractère '\0', caractère de fin de
chaîne.

SM-SMI3
6
4- Chaînes et affectation

On ne peut affecter des chaînes à des variables de


chaînes de manière globale (à la déclaration
seulement).

char x[10]; //déclaration de la variable chaîne x.


char x[10]="salam";
// affectation de la chaîne "salam" à la variable x :
initialisation.
SM-SMI3 7
On peut aussi faire des affectations caractère par
caractère.

Exemple
char x[10]; //déclaration de la variable chaîne x.

x[0]='s'; // affectation du caractère 's' à la


première case.

SM-SMI3
 Initialisation des chaînes
-Initialisation globale
Exemple
char x[]="salam";
-Initialisation caractère par caractère
Exemple
char x[]={'s','a','l','a','m','\0'};

SM-SMI3 9
Ch 5
Traitement de chaînes de caractères

SM-SMI3 10
 Présentation

les fonctions qui simplifient la manipulation des


chaînes de caractères :

- strlen(ch) donne longueur de ch;


- strcmp(ch1,ch2) compare ch1 et ch2;
- strcpy(ch1,ch2) copie ch2 dans ch1;
- etc……

SM-SMI3 11
 Utilisation de strlen
#include<stdio.h>
#include<string.h>

main()
{ char ch1[100]="salam";
printf("%d",strlen(ch1));
}

SM-SMI3 12
 Utilisation de strcmp
strcmp(ch1,ch2) retourne l'une des valeurs suivantes

0 si ch1 =ch2
 -1 si ch1 < ch2
1 si ch1 > ch2
#include<stdio.h>
#include<string.h>

main()
{char ch1[100]="salam";
char ch2[20]="salam";
if(strcmp(ch1,ch2)<0)
printf("%s est inf %s",ch1,ch2);
else
if (strcmp(ch1,ch2)>0)
printf("%s est sup %s",ch1,ch2);
else
printf("les chaînes sont égales");
}
SM-SMI3 13
 Utilisation de strcmp(suite)
strcmp(ch1,ch2) retourne l'une des valeurs suivantes

0 ch1 =ch2
-1 ch1 < ch2
1 ch1 > ch2
#include<stdio.h>
#include<string.h>

main()
{char ch1[100]="salam";
char ch2[20]="salam1";
if(strcmp(ch1,ch2)<0)
printf("%s est inf %s",ch1,ch2);
else
if (strcmp(ch1,ch2)>0)
printf("%s est sup %s",ch1,ch2);
else
printf("les chaînes sont égales");
}
SM-SMI3 14
 Utilisation de strcmp(suite)
strcmp(ch1,ch2) retourne l'une des valeurs suivantes

0 ch1 =ch2
-1 ch1 < ch2
1 ch1 > ch2
#include<stdio.h>
#include<string.h>

main()
{char ch1[100]="salam1";
char ch2[20]="salam";
if(strcmp(ch1,ch2)<0)
printf("%s est inf %s",ch1,ch2);
else
if (strcmp(ch1,ch2)>0)
printf("%s est sup %s",ch1,ch2);
else
printf("les chaînes sont égales");
}
SM-SMI3 15
 Remarque
strcmp prend en considération la casse.
A est différent de a
On peut utiliser
stricmp
pour négliger la casse.

SM-SMI3 16
 Utilisation de strncmp
strncmp(ch1,ch2,n) compare les n premiers
caractères de ch1 et ch2
Exemple
strncmp("salam","salut",3) 0

Remarque
on peut aussi utiliser
strnicmp("Salam","salut",3)0

SM-SMI3 17
 Utilisation de strcpy
strcpy(ch1,ch2) copie ch2 dans ch1

#include<stdio.h>
#include<string.h>

main()
{char ch1[100]="salam ";
char ch2[20]="tout le monde";
strcpy(ch1,ch2);
printf("%s",ch1);
}

SM-SMI3 18
 Utilisation de strncpy
strncpy(ch1,ch2) copie n caractères de ch2 dans ch1

#include<stdio.h>
#include<string.h>

main()
{char ch1[20]="salam ";
char ch2[20]="tout le monde";
strncpy(ch1,ch2,5);
puts(ch1);
}

SM-SMI3 19
 Utilisation de strrev
strrev(ch) inverse les caractères de ch

#include<stdio.h>
#include<string.h>

main()
{char ch[100]="salam ";
printf("%s", strrev(ch));
}

SM-SMI3 20
 Utilisation de strcat
strcat(ch1,ch2) ajoute ch2 à ch1

#include<stdio.h>
#include<string.h>

main()
{char ch1[100]="salam ";
char ch2[20]="tout le monde";
strcat(ch1,ch2);
printf("%s",ch1);
}

SM-SMI3 21
 Utilisation de strncat
strncat(ch1,ch2,n) ajoute n caractères de ch2 à ch1

#include<stdio.h>
#include<string.h>

main()
{char ch1[100]="salam ";
char ch2[20]="tout le monde";
strncat(ch1,ch2,4);
printf("%s",ch1);
}

SM-SMI3 22
 Changement de casse
strlwr(ch) convertit ch en minuscule.
strupr(ch) convertit ch en majuscule.
Exemple
printf(strlwr("Salam")); salam
printf(strupr("Salam")); SALAM

SM-SMI3 23
 Recherche d'un caractère dans une chaîne
char *pointeur=strchr(ch, car)
recherche le caractère car dans la chaîne ch.

#include<stdio.h>
#include<string.h>

main()
{char ch[100]="salam ";
char *ptr;
ptr=strchr(ch,'a');
printf("%s",ptr);  alam
}
SM-SMI3 24
char *pointeur=strrchr(ch, car)
recherche le caractère car dans la chaîne ch à partir
de la fin.

#include<stdio.h>
#include<string.h>

main()
{char ch[100]="salam ";
char *ptr;
ptr=strrchr(ch,'a');
printf("%s",ptr);  am
}
SM-SMI3 25
 Recherche d'une sous-chaîne dans une chaîne
char *pointeur=strstr(ch, sous-chaîne)
recherche la sous-chaîne sous-chaîne dans la chaîne
ch.

#include<stdio.h>
#include<string.h>

main()
{char ch[100]="salam ";
char *ptr;
ptr=strstr(ch,"ala");
printf("%s",ptr);  alam
}
26
SM-SMI3
 Recherche d'un caractère d'une chaîne dans une
autre
char *pointeur=strpbrk(ch1, ch2)
recherche un caractère de ch2 dans ch1.
#include<stdio.h>
#include<string.h>

main()
{char ch[100]="salam ";
printf(strpbrk("salam","ra"));  alam
}

SM-SMI3 27

Vous aimerez peut-être aussi