Wednesday, 30 November 2016

Chaine de caracteres en C (complement de cours)

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 : 
 

No comments:

Post a Comment

Note: only a member of this blog may post a comment.