Chaines de Caractères
Chaines de Caractères
Chaines de Caractères
1) Définition :
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
Cours d'algorithmique/Programmation 2 1
Chaines de caractères
b) Allocation dynamique :
Cours d'algorithmique/Programmation 2 2
Chaines de caractères
b) Initialisation à l’exécution :
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):
Cours d'algorithmique/Programmation 2 4
Chaines de caractères
Cours d'algorithmique/Programmation 2 5
Chaines de caractères
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:
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