[C] répeter le programme

Fermé
rose77 - 22 mai 2005 à 21:15
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 - 23 mai 2005 à 08:44
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

crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
22 mai 2005 à 21:38
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
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
22 mai 2005 à 21:38
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
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
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
22 mai 2005 à 22:04
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

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

Posez votre question
j ai tout essayé,
quelqu un pourrait il m aider svp
0
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
23 mai 2005 à 08:44
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