Strcmp

Résolu
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   -  
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   -
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

6 réponses

mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
en quel language ?
0
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   19
 
ah ouai excusez moi c en c
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
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);
0
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   19
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
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;
} 
0
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   19
 
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
0