Strcmp

Résolu/Fermé
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 - 20 mai 2008 à 18:42
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 - 22 mai 2008 à 21:45
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 jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
20 mai 2008 à 18:43
en quel language ?
0
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
20 mai 2008 à 18:46
ah ouai excusez moi c en c
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
20 mai 2008 à 18:50
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 vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
20 mai 2008 à 19:05
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 jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
20 mai 2008 à 19:56
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 vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
22 mai 2008 à 21:45
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