[C] répeter le programme

rose77 -  
blurk Messages postés 493 Date d'inscription   Statut Membre -
bonjour,
quelqu un pourrait il m aider s il vous plait?
j ai fait une fonction qui recoit en argument un texte et un mot
une fois que l utilisateur à tappé son texte et son mot, elle cherche ce mot ds la texte et affiche le mot qui le suit.
mais je bloque, car je dois refaire la meme chose c'est à dire que le mot trouvé devienne le mot recherché dans le texte
j'ai essayé avec la fonction recursive mais je n y arrive pas

voici mon programme qui ne marche que pr le premier mot, merci de m'aider s il vous plait...

#include <stdio.h>
#include <string.h>
#define N 20

void mn(char str1[],char str2[]) {

char *ptr;
char *tab;
int l;
int i=0;
gets(str1);
gets(str2);
l=strlen(str2);
ptr = strstr(str1, str2);
i=i+l;
do {printf("%c",ptr[i]);

i++;
}
while(ptr[i]!=' ');

}
int main (void)
{
char m[N];
char n[N];
mn(m,n);
return 0;}

6 réponses

  1. crabs Messages postés 909 Statut Membre 507
     
    Salut
    L'idée est bonne, mais il faut faire la saisie dans le main().
    Ensuite ta fonction recherche toi tenir compte des facteurs suivants :
    - le mot recherché peut être le dernier -> pas de suivant
    - le mot suivant est le dernier (test de fin de recherche)
    - le mot recherché n'est pas trouvé
    T'es pas obligé de faire de la recursivité. Utilise un prototype du type :
    /*
    ** Fonction qui recherche 'mot' dans 'phrase' et retourne le mot 'suivant'
    ** retourne 
    **  0: le mot est le dernier
    **  1: tout est ok
    ** -1: le mot n'a pas été trouvé
    */
    int recherche_suivant( char* phrase, char* mot, char* suivant )
    
    Au niveau de l'appel :
    char phrase[...], mot[...], suivant[...] ;
    int ret, i ;
    /* faire les saisies */
    for( i=0; i<nombre_de_boucle_a_faire, i++)
      {
      ret = recherche_suivant( phrase, mot, suivant ) ;
      /* faire les tests de retour et arrêter si nécessaire */
      strcpy( mot, suivant ) ;
      }
     
    

    Attention, recherches_suivant() doit copier le mot suivant dans la chaine
    'suivant', pas faire jou-jou avec les pointeurs.
    0
  2. blurk Messages postés 493 Date d'inscription   Statut Membre 160
     
    salut

    déjà il faudrait 2 scanf, un pour saisir le texte, et un pour saisir le mot.
    ensuite pour la position du mot, je peux me tromper mais ça doit être
    i-l

    cordialement
    0
  3. rose77
     
    je vous remercie
    pour les scanf je les ai remplacé par gets.
    Mais, Crabs j'essaie avec des exemples tres simple, je voudrais repeter la boucle tant que str1[i]!='\0' (le teste n'est pas encore terminé).
    Est ce possible?
    car je ne sais vraiment pas comment appliquer ton protype, dans la boucle for comment connaitre le nbr de boucles à faire?

    merci
    0
  4. crabs Messages postés 909 Statut Membre 507
     
    Salut,
    La fin d'un mot ça peut être effectivement l'espace ou la fin de chaine.
    Si c'est possible, y a un opérateur 'OU' en C : ||
    gets() remplace '\n' de fin de saisie, par '\0'
    Pour le nombre de boucle, ça c'est toi qui voit, tu dit que tu dois le faire une
    fois, puis que tu dois le refaire avec le mot suivant qui devient le mot à
    rechercher (2 boucles)

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

    Posez votre question
  6. rose77
     
    j ai tout essayé,
    quelqu un pourrait il m aider svp
    0
  7. blurk Messages postés 493 Date d'inscription   Statut Membre 160
     
    J'ai retrouvé ça dans mes archives
    Attention, il va y avoir une petite modification pour que ça fasse ce que tu as demandé.
    A+

    //---------------------------------------------------------------------------
    // retourne l'index de chaine ou a ete trouve la souschaine
    int __fastcall trouve_mot_avant(char *avantquoi,char *chaine)
    {
    int len=strlen(chaine),lenmot=strlen(avantquoi);
    int i;
    char * tampon=(char *)malloc(lenmot);
    bool found=false;
    for ( i=0;i<(len-lenmot) && !found;++i)
      {
      strncpy(tampon,chaine+i,lenmot);  tampon[lenmot]=0;
      if(!strcmp(avantquoi,tampon))found=true;
      }
    free(tampon);
    return i;
    }
    
    --
    ¤
    0