Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2588 connectés 

  FORUM HardWare.fr
  Programmation

  [C] Problème avec strstr

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Problème avec strstr

n°144638
coolboarde​r
Allons-y !
Posté le 25-05-2002 à 17:30:14  profilanswer
 

Salut à tous !
 
J'ai un petit problème avec la fonction strstr().
 
En effet, après avoir récupéré des chaines avec la fonction fgets (ce qui me permet d'avoir des chaines contenant des espaces), j'essaye de trouver si la chaine rentrée contient une autre chaine.
 
Exemple :
l'utilisateur rentre "le seigneur des anneaux" et apres il rentre "seigneur" et le programme devrait retourner un TRUE car la chaine contient effectivement ce mot.
 
Mon problème, c'est que si l'utilisateur tape "seigneur" ca ne marche pas, mais par contre "anneaux" marchera.
J'ai fait des tests et il apparait que seul le dernier mot de la phrase peut etre trouvé.
 
Quelqu'un aurait une explication et/ou un moyen de pouvoir résoudre ce petit problème ?
 
Merci d'avance
 
Yann


---------------
“You want weapons? We’re in a library! Books! The best weapons in the world!”
mood
Publicité
Posté le 25-05-2002 à 17:30:14  profilanswer
 

n°144642
youdontcar​e
Posté le 25-05-2002 à 17:33:48  profilanswer
 

soit plus précis / montre ton code, ça a tout l'air d'être un bug SS (simple & sournois).

n°144644
coolboarde​r
Allons-y !
Posté le 25-05-2002 à 17:40:27  profilanswer
 

Dans ma classe j'ai surchargé l'opérateur >> :
 
istream &operator>>(istream &stream, livre &bouquin)
 {
   printf("Entrez le titre : " );
   fgets(bouquin.titre,128,stdin);
 
   return stream;
 }
 
 
titre est un char[128];
 
 
après je teste :
 
printf(debut->get_contenu().get_titre());
//affiche "le seigneur des anneaux"
 
printf(rech);
//affiche "seigneur"
 
if(strstr(debut->get_contenu().get_titre(),rech)!=
NULL)
{
 res[i]=*debut;
 i++;
}
 
 
et mon tableau res ne contient aucun resultat.
Par contre, si je mets "anneaux" comme deuxième string, le tableau res ne sera pas vide.
 
 
bon tout ca se passe dans une liste chaînée alors je vous mets pas tout :)
Toujours est-il que le prog affiche les bonnes strings mais ne voit pas si la deuxieme est contenue dans la première à moins que celle-ci soit la dernière partie de la première.


---------------
“You want weapons? We’re in a library! Books! The best weapons in the world!”
n°144647
youdontcar​e
Posté le 25-05-2002 à 17:48:22  profilanswer
 

ça m'a l'air bien compliqué ton truc ...
 
c'est quoi  
 
{  
res[i]=*debut;  
i++;  
}  
 
?
 
et que veux-tu faire au juste ? ce n'est pas un problème de strstr() mais plutôt dans la conception de ton programme.
 
car un truc genre :
 
char* str = "le seigneur des anneaux";
char* search = strstr(str, "seigneur" );
 
te renverra bien un pointeur non nul.

n°144650
coolboarde​r
Allons-y !
Posté le 25-05-2002 à 17:56:34  profilanswer
 

Mon programme c'est une médiathèque  :D  
 
{  
res[i]=*debut;  
i++;  
}  
 
ca sert à stocker les dix premiers résultats qui contienent le mot rechercher par un utilisateur.
 
tous mes livres sont stockés dans un fichier. Je les extrait ensuite et j'en fait une liste chaînée. Cette liste est parcourue du premier au dernier élément.
L'utilisateur rentre un mot et le prog doit sortir les livres dont le titre contiennent ce mot.
 
c'est pourquoi je recherche le mot entré par l'utilisateur dans le titre du livre (un objet de classe livre).
 
Je pense que le problème vient des espaces, je vais essayer de les supprimer avant de faire le test


---------------
“You want weapons? We’re in a library! Books! The best weapons in the world!”
n°144654
youdontcar​e
Posté le 25-05-2002 à 18:00:15  profilanswer
 

:D
 
montre plus de code, parce que là ...

n°144659
zi_ril_wan​ou
Posté le 25-05-2002 à 18:12:27  profilanswer
 

Hou, je crois savoir d'où vient le problème :
chaine1 <- "le seigneur des anneaux\n"
rech <- "seigneur\n"
 
strstr(chaine1,rech) -> NULL c'est évident ! (problème avec les \n !)  
Tout dépend de la manière dont tu récupère tes chaînes, mais elle ne doivent pas être constitués de '\n' et se terminer obligatoirement par '\0'...


---------------
Get the Cooool... Get the cool shoe-shine !
n°144660
coolboarde​r
Allons-y !
Posté le 25-05-2002 à 18:15:16  profilanswer
 

Je récupère mes chaines avec un fgets sur stdin.
 
Tu saurais comment faire pour palier ce problème ?
 
J'ai essayé d'ajouter \0 à la fin , mais sans plus de succès


---------------
“You want weapons? We’re in a library! Books! The best weapons in the world!”
n°144661
zi_ril_wan​ou
Posté le 25-05-2002 à 18:22:03  profilanswer
 

char *cr_ptr;
 
if ((cr_ptr = strchr(chaine1,'\n';))!=NULL) {
    *cr_ptr = '\0';
}
 
ça devrait marcher...
 
Mais si tu récupère ta chaine 'rech' par un fgets, fait plutôt un sscanf par la suite, pour éviter les "isspace" caractères :
 
char temp[BUFSIZ];
sscanf(rech,"%s",temp);
strcpy(rech,temp);


---------------
Get the Cooool... Get the cool shoe-shine !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C] Problème avec strstr

 

Sujets relatifs
probleme d'adresse www.monsite.com HELP![ ksh/shell ] probleme avec une xterm
Probleme compteur de clics.[MFC] probleme de HScroll dans une CListBox...
Code Javascript [Problème] >>Newbie inside need Help!!Problème de driver (Access)
J'ai un problème de commande[LINUX] problème sur un driver !
[SQL] Probleme d'export :/Probleme de CSS...
Plus de sujets relatifs à : [C] Problème avec strstr


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR