1. L'algorithme du cours est retracé (partiellement) en C comme suit :
#include <stdio.h>
#include <string.h> //contient les declarations de strcpy, strcmp ...
int main()
{
char s[20]="",s1[10]="",s2[10]="",s3[10]="Bonsoir";
int i;
printf("\n1. Initialement s1=%s et s2=%s",s1,s2);
strcpy(s1,"Bonjour");
strcpy(s2,"Bonsoir");
printf("\n Apres strcpy s1=%s et s2=%s",s1,s2);
printf("\n2. Comparaison s1 a s2 :%d",strcmp(s1,s2));
printf("\n3. Comparaison s2 a s1 :%d",strcmp(s2,s1));
printf("\n4. Comparaison de \"Bonjour\" avec \"Bonjour\" :%d"
"\n donc ce resultat indique que les chaines sont identiques",strcmp("Bonjour","Bonjour"));
printf("\n\n5. Comparaison de s2=\"%s\" avec s3=\"%s\" :%d",s2,s3,strcmp(s2,s3));
if(s2!=s3){
printf("\n6. Mais si ce message s'affiche alors s2==s3 est fausse. On deduit"
"\n qu'il ne faut pas utiliser les operateurs de relation pour "
"\n realiser des comparaisons lexicographiqes entre chaines");
}
printf("\n\n7. Comparaison de ' Bonsoir' avec 'bonjour':%d",strcmp(" Bonsoir","bonjour"));
//Pour concatener s1 avec s2 dans s on procede en 2 etapes
strcat(s,s1);//si la taille max de s etait plus petite que le contenu de s1 alors
strcat(s,s2);//bonjour les problemes car strcat et family non securisees
printf("\n\n8. La chaine s=%s",s);
printf("\n Longueur de s :%u",strlen(s));
strcpy(s1,"Non");
printf("\n9. Apres strcpy(s1,\"Non\"); la chaine s1=%s",s1);
s1[1]='\0'; //ce genre d'acces par element est a eviter
printf("\n10.Apres s1[1]='\\0'; longueur de s1 devient :%u",strlen(s1));
printf("\n et s1=%s",s1);
if(s1!='N')printf("\n11.Mais si ce message s'affiche alors s1=='N'est fausse."
"\n Donc faites attention, la chaine de caractere \"%s\""
"\n et differente du caractere '%c' car elle contient les"
"\n caracteres de code ASCII %d et %d",s1,'N',s1[0],s1[1]);
return 0;
}
2. L’exĂ©cution de ce code donne :
#include <stdio.h>
#include <string.h> //contient les declarations de strcpy, strcmp ...
int main()
{
char s[20]="",s1[10]="",s2[10]="",s3[10]="Bonsoir";
int i;
printf("\n1. Initialement s1=%s et s2=%s",s1,s2);
strcpy(s1,"Bonjour");
strcpy(s2,"Bonsoir");
printf("\n Apres strcpy s1=%s et s2=%s",s1,s2);
printf("\n2. Comparaison s1 a s2 :%d",strcmp(s1,s2));
printf("\n3. Comparaison s2 a s1 :%d",strcmp(s2,s1));
printf("\n4. Comparaison de \"Bonjour\" avec \"Bonjour\" :%d"
"\n donc ce resultat indique que les chaines sont identiques",strcmp("Bonjour","Bonjour"));
printf("\n\n5. Comparaison de s2=\"%s\" avec s3=\"%s\" :%d",s2,s3,strcmp(s2,s3));
if(s2!=s3){
printf("\n6. Mais si ce message s'affiche alors s2==s3 est fausse. On deduit"
"\n qu'il ne faut pas utiliser les operateurs de relation pour "
"\n realiser des comparaisons lexicographiqes entre chaines");
}
printf("\n\n7. Comparaison de ' Bonsoir' avec 'bonjour':%d",strcmp(" Bonsoir","bonjour"));
//Pour concatener s1 avec s2 dans s on procede en 2 etapes
strcat(s,s1);//si la taille max de s etait plus petite que le contenu de s1 alors
strcat(s,s2);//bonjour les problemes car strcat et family non securisees
printf("\n\n8. La chaine s=%s",s);
printf("\n Longueur de s :%u",strlen(s));
strcpy(s1,"Non");
printf("\n9. Apres strcpy(s1,\"Non\"); la chaine s1=%s",s1);
s1[1]='\0'; //ce genre d'acces par element est a eviter
printf("\n10.Apres s1[1]='\\0'; longueur de s1 devient :%u",strlen(s1));
printf("\n et s1=%s",s1);
if(s1!='N')printf("\n11.Mais si ce message s'affiche alors s1=='N'est fausse."
"\n Donc faites attention, la chaine de caractere \"%s\""
"\n et differente du caractere '%c' car elle contient les"
"\n caracteres de code ASCII %d et %d",s1,'N',s1[0],s1[1]);
return 0;
}
2. L’exĂ©cution de ce code donne :