Strcmp

Résolu
Bonjour,
je voudrais comparer deux chaines de caracteres caractere par caractere.
par exemple si je compare 'abcd' et 'abnd' il fodrai ke je sache ke c la troisieme lettre ki e differente

merci de m'aider rapidement
Configuration: Windows Vista
Opera 9.26

6 réponses

  1. ben tu fais une boucle pour parcourir tes deux chaines et tu compare chaque caracteres s'il ne sont pas les meme tu dis a quel position il ne sont pas les meme grace a l'indice
    ça donne ça a peu pres
    for(i=0;i<taille;i++)
    if(chaine1[i]!=chaine2[i])
    printf("le caractere %d n'est pas le meme dans les deux chaines\n",i+1);
    1. ok l'idee est bonne mais c pas exactement ca

      voila le code :
      #include <stdlib.h>
      #include <stdio.h>
      #include <string.h>

      #define TAILLE 3

      int main(int argc,char*argv[])
      {
      int i=0;
      int j=0;
      printf("Parametres d'entree : ");
      printf("argc =%d\n\n",argc);

      for (i=0;i<argc;i++)
      {
      printf("argv[%d]=%s\n",i,argv[i]);

      }
      printf("\n");
      //recuperation du puzzle de depart//
      char matrix1[TAILLE][TAILLE];

      for (i=0;i<3;i++)
      {
      for (j=0;j<3;j++)
      {
      matrix1[i][j]=argv[1][i*TAILLE+j];
      }
      }
      //affichage du puzzle de depart//

      printf("Puzzle de depart : \n\n");
      for(i=0; i<3; i++)
      {

      for(j=0; j<3; j++)
      {
      printf("%c ", matrix1[i][j]);
      }
      printf("\n");
      }
      //recuperation du puzzle d'arrivee//
      char matrix2[TAILLE][TAILLE];

      for (i=0;i<3;i++)
      {
      for (j=0;j<3;j++)
      {
      matrix2[i][j]=argv[2][i*TAILLE+j];
      }
      }
      //affichage du puzzle d'arrivee//

      printf("Puzzle d'arrivee : \n\n");
      for(i=0; i<3; i++)
      {

      for(j=0; j<3; j++)
      {
      printf("%c ", matrix2[i][j]);
      }
      printf("\n");
      }
      printf("\n\n");
      //comparaison des deux matrices//
      for(i=0;i<3;i++)
      {
      for(j=0; j<3; j++)
      {
      if(matrix1[i][j]!=matrix2[i][j] && matrix1[i][j]!=' ')
      printf("le caractere %d chaines\n",i*TAILLE+j);
      }
      }

      printf("fin\n");
      return 0;
      }

      on demarre avec mc []prog.exe "abcdefgh " "abcde fgh"

      donc forcement il ya une erreur de position mais moi je voudrais kil reconnaisse une erreur du type :

      mc []prog.exe "abcdefgh " "abcdM fgh" ou le "e" et le "M" ne sont pas pareils
      1. ok je vois ce que tu veux faire...
        ce que tu peux faire c'est utiliser une matrice temporaire dans laquelle tu fais une concatenation des deux chaine et tu compare la matrice 1 avec la matrice temporaire
        ça donne ça
        #include <stdlib.h>
        #include <stdio.h>
        #include <string.h>
        
        #define TAILLE 3
        
        
        
        int main(int argc,char*argv[])
        {
        int i=0;
        int j=0;
        printf("Parametres d'entree : ");
        printf("argc =%d\n\n",argc);
        
        for (i=0;i<argc;i++)
        {
        printf("argv[%d]=%s\n",i,argv[i]);
        
        }
        printf("\n");
        //recuperation du puzzle de depart//
        char matrix1[TAILLE][TAILLE];
        
        
        for (i=0;i<3;i++)
        {
        for (j=0;j<3;j++)
        {
        matrix1[i][j]=argv[1][i*TAILLE+j];
        }
        }
        //affichage du puzzle de depart//
        
        printf("Puzzle de depart : \n\n");
        for(i=0; i<3; i++)
        {
        
        for(j=0; j<3; j++)
        {
        printf("%c ", matrix1[i][j]);
        }
        printf("\n");
        }
        //recuperation du puzzle d'arrivee//
        char matrix2[TAILLE][TAILLE];
        
        
        for (i=0;i<3;i++)
        {
        for (j=0;j<3;j++)
        {
        matrix2[i][j]=argv[2][i*TAILLE+j];
        }
        }
        //affichage du puzzle d'arrivee//
        
        printf("Puzzle d'arrivee : \n\n");
        for(i=0; i<3; i++)
        {
        
        for(j=0; j<3; j++)
        {
        printf("%c ", matrix2[i][j]);
        }
        printf("\n");
        }
        printf("\n\n");
        char temp[TAILLE][TAILLE];
        strcpy(*temp,argv[2]);
        strcat(*temp,argv[3]);
        //comparaison des deux matrices//
        for(i=0;i<3;i++)
        {
        for(j=0; j<3; j++)
        {
        
        if(matrix1[i][j]!=temp[i][j])
        printf("le caractere %d chaines\n",(i*TAILLE+j)+1);
        }
        }
        
        printf("fin\n");
        return 0;
        } 
        1. au final la meilleure solution est une comparaison caractere par caractere

          a ce moment la le strcmp ne marche pas on compare directement avec la valeur ascii de l'espace (32) :

          if (matrix1[k+1][l]==SP && k+1<3)
          {
          m=1;
          direction='b';
          }

          avec SP=32