Où est le problème ?

j'ai fait une petit exercice en langage C, voilà l'énoncé:
écrivez un programme qui vérifie si une sous-chaine existe dans une chaîne.
voilà le Code Source de ma version :
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(){

int i,j,k,verif;

char ch[300],sch[30];

printf("entrez votre texte\t");

gets(ch);

printf("entrez le mot que vous cherchez\t");

gets(sch);

for(i=0,k=0,verif=0;i<strlen(ch);i++){

  for(j=i;j<(strlen(sch)+i);j++){

  verif+=fabs(strcmp(sch[k],ch[j]));

  k++;

                                            }

  printf("la valeur de %d",verif);

  if(verif==0){printf("\nexiste");break;}

                                                     }

if(verif!=0)

printf("le mot que vous avez entrez n'éxiste pas");

return 0;

}

2 réponses

  1. 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 :)
    0
    1. Contributeur
      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 :
      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 :-).
      0