Vous êtes sur la page 1sur 8

Chaines de caractères

1) Définition :

une chaine de caractères « string » est composée de caractères alphanumériques, dont la


fin est marquée par un caractère spéciale.

Ce caractère spécial est ajouté de façon systématique, à la fin de la chaine, en cas de


saisie globale et après validation.

Dans le cas où le remplissage est effectué caractère par caractère, ce caractère spécial
doit être ajouté à la fin de façon explicite «’\0’ ».

Une chaine de caractères est considérée comme un cas particulier des tableaux.

2) Déclaration :
l’allocation de la mémoire pour une chaine peut se faire de deux façons :
a) Allocation statique : cette réservation est fixée au moment de la compilation

syntaxe : char chaine[n] ; // n : constante indiquant la capacité de la chaine.


exemple :
c har s[20]

Cours d'algorithmique/Programmation 2 1
Chaines de caractères

b) Allocation dynamique :

Ce genre d’allocation est réalisé au moment de l’exécution.


L’adresse de la chaine est stockée dans un pointeur après initialisation.

syntaxe : char *pointeur; // déclaration du pointeur

pointeur=(char *)malloc(n*sizeof(char)); //allocation de n octets avec n :variable quantifiée


//au moment de l’exécution
2) Initialisation: l’initialisation peut être réalisée soit à la compilation(déclaration), soit au cours
de l’exécution (traitement).
a) Initialisation à la déclaration :

syntaxe : char chaine[]=''texte'';


exemples :
char s1[10]=‘’exemple ’’;// ne pas dépasser 9 car
char s2[]=‘’ message ’’; // la taille de s2 est assimilée à la taille de la constante
char *p1=‘’dynamique’’;// p1 mémorise l’adresse de la chaine constante
char *p2=s1; //p2 pointe vers la place mémoire de s1

Cours d'algorithmique/Programmation 2 2
Chaines de caractères

b) Initialisation à l’exécution :

ce mode d’initialisation est réalisé à l’aide des fonctions prédéfinies.


On peut distinguer deux catégories de fonctions:
❖ Fonctions de saisie : il s’agit de « scanf » et « gets » :
o Scanf : permet le stockage des caractères saisis jusqu’au 1er caractère blanc ou
validation
exemple : char s1[10];
scanf(‘’%s’’,s1);
o gets : cette fonction est bien adaptée à la saisie des chaines; permet le stockage des
caractères saisis jusqu’à la validation.

exemple : char s1[10];


gets(s1);
❖ Fonctions de recopie : il s’agit des deux fonctions prédéfinies : « strcpy » et « strncpy »

o strcpy : permet de copier le contenu d’une chaine( constante ou variable) dans une
autre variable chaine de caractères.

Cours d'algorithmique/Programmation 2 3
Chaines de caractères

Exemple :
char *s1,*s2;
int n;
scanf(‘’ %d’’,&n);

s1=(char *)malloc(n);
s2=(char *)malloc(n);
……..
strcpy(s1,’’texte ‘’);
strcpy(s2, s1);//copie le contenu de s1 dans s2
o Strncpy : permet de copier les n premiers caractères d’une chaine dans une autre.

Syntaxe : strncpy(dest,source,n):

Exemple : strncpy(s1,s2,10);// copie les 10 premiers caractères de s2 dans s1.

Cours d'algorithmique/Programmation 2 4
Chaines de caractères

3) Fonctions prédéfinies (string.h) :


Nom de la fonction Type-retour Traitement correspondant
strlen(s) entier Retourne la longueur de la chaine s
strcat(s1,s2) void Concaténation de s1 et s2 dans s1
strncat(s1,s2,n) void Idem à « strcat », en se limitant à n
caractères de s2
strcmp(s1,s2) entier Compare s1 et s2 , retourne 0 si
égalité et #0 si différence.
strncmp(s1,s2,n) entier idem à « strcmp », en se limitant aux
n premiers caractères
stricmp(s1 , s2) entier Idem à strcmp sans distinguer entre
minuscule et majuscule.
strnicmp(s1 , s2 , n) entier Idem à strncmp sans distinguer entre
minuscule et majuscule.
strchr(s,c) char * Recherche de la 1ère occurrence du
caractère c dans la chaine s.
Retourne l’adresse de ce caractère
s’il existe , NULL sinon.

Cours d'algorithmique/Programmation 2 5
Chaines de caractères

Nom de la fonction type-retour Traitement approprié

strrchr(s , c) Char * Idem à « strchr»avec recherche inversée.

strstr(s1 , s2) Char * Recherche de s2 dans s1 et retourne


l’adresse de la 1ère occurrence ou NULL
sinon.
strpbrk(s1 , s2) Char * Recherche du 1er caractère de s1 dans
s2.
strset(s , c) Void Remplace tous les caractères de s par c.

Strnset(s , c , n) Void Idem à «strset»pour les n 1er caractères.

Strlwr(s) Void Conversion de s en minuscule.

Strupr(s) void Conversion de s en majuscule.

Cours d'algorithmique/Programmation 2 6
Exercice

• Ecrire une fonction qui réalise un masque de saisie d’un entier naturel, en faisant appel aux
fonctions prédéfinies suivantes:

isdigit(car) : vérifie si un caractère est numérique.


atoi(chaine) : permet de convertir le contenu d’une chaine en entier, si elle ne contient
que des caractères numériques.

Cours d'algorithmique/Programmation 2 7
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<stdlib.h>
char *masque_entier(int );
main() {
int x,n; char *ch;
do{printf("nombre de chiffres (0<n<11):");scanf("%d",&n);}while(n<1||n>10);
ch=masque_entier(n);
if(ch==NULL) puts("Echec d'allocation!! Fin de session");
else {x=atoi(ch); // conversion du contenu de la chaine en entier
printf("\n l'entier saisi est : %d",x);}
getch();
}
char *masque_entier(int n){
char c,*z,*ch=(char *)malloc((n+1)*sizeof(char));// allocation dynamique
if(ch==NULL) return NULL;
z=ch; printf("donner un entier naturel ne dépassant pas %d chiffres : ",n);
do { c=getch();
if(isdigit(c)&&z<ch+n) // le car est accépté si il est numérique et on a pas dépassé n chiffres
{ putchar(c);*(z++)=c;}
else putchar('\a');// lancer un beep en cas de caractère invalide
}while(c!=13||z==ch);// sortir de la boucle si l'utilisateur a tapé la touche <Entrée> après
avoir tapé au moins un chiffre Cours d'algorithmique/Programmation 2 8

*z='\0'; return ch; }

Vous aimerez peut-être aussi