Strcmp

Résolu/Fermé
Signaler
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
-
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
-
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

Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
431
en quel language ?
0
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19
ah ouai excusez moi c en c
0
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
431
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
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
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
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
431
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
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
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