Beruflich Dokumente
Kultur Dokumente
CH
Chapitre 6
LES CHANES DE CARACTRES
\0
86
87
Dclaration
De mme que les tableaux, les chanes peuvent tre initialises lors de leur
dfinition
Exemples
Exemple
char Nom [20] ; /* La variable Nom est une chane ne pouvant contenir plus de
19 caractres utiles */
char ch1[8] = {'B', 'o', 'n', 'j', 'o', 'u', 'r', '\0'} ;
char ch2[10] = "Bonjour" ; /* initialisation particulire aux chanes de caractres */
Remarque
char ch3[] = "Bonjour" ; /* Correct : ch3 chaine de 8 caractres*/
88
89
gets
gets(char ch[ ])
ou
gets(char *ch)
puts
puts(char ch[ ])
ou
puts(char *ch)
90
Exercice 1
91
Exercice 2
#include <stdio.h>
main()
{
char jour[7][9] = {"Lundi" , "Mardi" , "Mercredi" , "Jeudi" , "Vendredi" ,
"Samedi" , "Dimanche" };
int i ;
do
{
printf("donner un nombre entier entre 1 et 7 : "); scanf("%d",&i);
}
while ( ( i<=0 ) || ( i>7 ) );
printf("le nom du jour %d de la semaine est %s ", i , jour[i-1]);
#include <stdio.h>
main()
{ char CH[20]; int i,j=0;
printf("Donner la chaine CH :");
gets(CH); //Lecture de CH
for (i = 0; CH[i] != '\0'; i++)
if (CH[i] != ' ' && CH[i] != '\t')
{
CH[j] = CH[i];
j++;
}
CH[j] = '\0';
puts(CH); //Affichage du rsultat
}
}
92
93
strcat
strcat(char s1 [ ], char s2 [ ])
strcmp
int strcmp(char s1[ ], char s2 [ ])
strcpy
Exemple
char s1[20], s2[10];
strcpy(s1, "Bonjour" ); //Copie de "Bonjour" dans s1
strcpy(s2, s1); //Copie le contenu de s1 dans s2
puts(s2); //Affiche le contenu de s2 : Bonjour
94
Exercice
95
Exercice
Ecrire un programme qui range le miroir (mot lenvers) du mot CH1 dans
une chaine CH2
#include <stdio.h>
#include <string.h>
main()
{
char CH1[20], CH2[20];
int i,l;
printf("Donner la chaine CH1 :"); gets(CH1);
l=strlen(CH1);
for(i=0; i<strlen(CH1);i++)
{
CH2[i]=CH1[--l];
}
CH2[i]='\0';
printf("\n Le miroir de CH1 :%s", CH2);
}
char noms[30][20];
int N; //Nombre de noms lus
int i , j , pos_min ;
//Lire nombre et liste des Noms
//Trier Noms
//Afficher Noms tris
Rappel :
int strcmp(char s1[ ], char s2 [ ])
strcpy(char s1[ ], char s2 [ ])
96
97
Correction
char noms[30][20];
int N, i , j , pos_min ;
//Lire nombre de noms
printf("\n Donner le nombre de noms lire :");
scanf("%d",&N);
//Lire noms
for( i = 0 ; i < N ; i++ )
{ printf("\n Donner le nom %d :",i+1);
scanf("%s",noms[i]);
}
//Trier nom
char ch[20]; //variable chaine intermdiaire pour effectuer lchange
for( i = 0 ; i < N-1 ; i++ )
{ pos_min = i; //le ime noms est le premier candidat
for( j = i+1 ; j < N ; j++ )
if( strcmp( noms[pos_min] , noms[j] ) > 0 )
pos_min=j;
if(pos_min != i )
{ strcpy( ch , noms[pos_min] );
strcpy( noms[pos_min] , noms[i] );
strcpy( noms[i] , ch) ;
}
}
//Afficher Noms tris.
Exercice
Ecrire un programme C permettant de vrifier si une chane CH1 est
incluse dans une chane CH2 sachant que les deux sont saisies au clavier
98
Correction
99
#include <stdio.h>
#include <string.h>
main()
{ char CH1[20], CH2[20]; int i=0,j=0,trouve=0;
printf("Donner la chaine CH1 :"); gets(CH1);
printf("\nDonner la chaine CH2 :"); gets(CH2);
while(CH2[i]!='\0'&&trouve==0)
{ j=0;
if(CH2[i]!=CH1[j]) i++;
else
while(CH2[i]==CH1[j] && trouve ==0 && CH2[i]!='\0')
{ i++;j++;
if (CH1[j]=='\0') trouve=1;
}
}
if(trouve==1)
{ if (strlen(CH1)==strlen(CH2))printf("\nCH1 est identique a CH2");
else printf("\nCH1 est incluse dans CH2");
}
else
printf("\n CH1 n est pas incluse dans CH2");
}
strstr
char *strstr(char ch1[ ], char ch2 [ ])
100
101
Correction 2
Exercice
#include <stdio.h>
#include <string.h>
main()
{ char CH1[20], CH2[20]; int i=0,j=0,trouve=0;
printf("Donner la chaine CH1 :"); gets(CH1);
printf("\nDonner la chaine CH2 :"); gets(CH2);
if(strstr(CH2, CH1))
printf("\nCH1 est incluse dans CH2");
else
printf("\n CH1 n est pas incluse dans CH2");
}
102
Correction
#include <stdio.h>
#include <string.h>
main()
{char CH[100], Rest[100], Mot[20];
int l, Cpt=0;
printf("Donner la chaine CH :"); gets(CH);
printf("Donner le mot recherch :"); gets(Mot);
l=strlen(Mot);
strcpy(Rest,CH);
if(strstr(Rest, Mot))
strcpy(Rest,strstr(Rest, Mot));
while(Rest)
{ Cpt++;
strcpy (Rest,Rest+l); // Recommencer la recherche aprs le Mot
if(strstr(Rest, Mot))
strcpy (Rest,strstr(Rest, Mot));
else
break;
}
printf("\nb occurence de %s : %d",Mot,Cpt);
}
104
103