Où est le problème ?
Fermé
assyass.mahmoud
Messages postés
19
Date d'inscription
vendredi 10 janvier 2014
Statut
Membre
Dernière intervention
15 mars 2017
-
Modifié par assyass.mahmoud le 19/06/2014 à 14:56
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 juin 2014 à 22:52
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 juin 2014 à 22:52
2 réponses
master_29
Messages postés
49
Date d'inscription
dimanche 8 décembre 2013
Statut
Membre
Dernière intervention
28 août 2017
12
25 juin 2014 à 17:14
25 juin 2014 à 17:14
Salut,
J'ai regardé ton programme,
remarque:
1/ strcmp compare une chaine avec une autre et envoie 0 si elle sont identique et autre choses sinon, et c'est pas ce que tu veux !!!
2/ t'as pas besoin de déclarer k , utilise juste i et j ^^
pour faire ce programme ,
dans les deux boucles for fait un test if et chaque fois que un élement de la sous chaine soit égale à l'élement de la chaine augment un compteur , (verif ) dans ton cas, et compare le à la fin avec strlen(sch) si il est égale c'est que c'est bon sinon c'est pas bon :)
J'ai regardé ton programme,
remarque:
1/ strcmp compare une chaine avec une autre et envoie 0 si elle sont identique et autre choses sinon, et c'est pas ce que tu veux !!!
2/ t'as pas besoin de déclarer k , utilise juste i et j ^^
pour faire ce programme ,
dans les deux boucles for fait un test if et chaque fois que un élement de la sous chaine soit égale à l'élement de la chaine augment un compteur , (verif ) dans ton cas, et compare le à la fin avec strlen(sch) si il est égale c'est que c'est bon sinon c'est pas bon :)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
25 juin 2014 à 22:52
25 juin 2014 à 22:52
Plusieurs problèmes :
gets(ch);
gets(sch);
A ne pas utiliser. Il faut plutôt utiliser fgets(). De plus, ces fonctions stockent lorsqu'il y a suffisamment de place un '\n' en fin de chaîne. Donc attention à le supprimer sinon, cela faussera tes recherches d'inclusion de sous-chaînes.
Question de style :
for(i=0,k=0,verif=0;i<strlen(ch);i++){
Initialise verif=0 e k=0 avant le for plutôt.
verif+=fabs(strcmp(sch[k],ch[j]));
C'est lourd... Utilise plutôt un if. Ou de manière concise :
De plus attention, strcmp() sert à comparer des chaînes pas des caractères. Sémantiquement, il faudrait plutôt mettre sch+k et ch+j. Mais je ne vois ps ce que tu veux faire avec ça ? Plutôt strncmp(), et tu précises le nombre de caractères à remplacer.
printf("la valeur de %d",verif);
N'oublie pas un '\n' en fin de chaîne.
printf("le mot que vous avez entrez n'éxiste pas");
Même remarque.
Je te laisse déjà corriger tout ça. Reposte ton programme corrigé et on corrigera les résidus :-).
gets(ch);
gets(sch);
A ne pas utiliser. Il faut plutôt utiliser fgets(). De plus, ces fonctions stockent lorsqu'il y a suffisamment de place un '\n' en fin de chaîne. Donc attention à le supprimer sinon, cela faussera tes recherches d'inclusion de sous-chaînes.
Question de style :
for(i=0,k=0,verif=0;i<strlen(ch);i++){
Initialise verif=0 e k=0 avant le for plutôt.
verif+=fabs(strcmp(sch[k],ch[j]));
C'est lourd... Utilise plutôt un if. Ou de manière concise :
verif+=strcmp(...,...)==0?0:1;
De plus attention, strcmp() sert à comparer des chaînes pas des caractères. Sémantiquement, il faudrait plutôt mettre sch+k et ch+j. Mais je ne vois ps ce que tu veux faire avec ça ? Plutôt strncmp(), et tu précises le nombre de caractères à remplacer.
printf("la valeur de %d",verif);
N'oublie pas un '\n' en fin de chaîne.
printf("le mot que vous avez entrez n'éxiste pas");
Même remarque.
Je te laisse déjà corriger tout ça. Reposte ton programme corrigé et on corrigera les résidus :-).