Problème avec strstr [C] - Programmation
Marsh Posté le 25-05-2002 à 17:33:48
soit plus précis / montre ton code, ça a tout l'air d'être un bug SS (simple & sournois).
Marsh Posté le 25-05-2002 à 17:40:27
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.
Marsh Posté le 25-05-2002 à 17:48:22
ç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.
Marsh Posté le 25-05-2002 à 17:56:34
Mon programme c'est une médiathèque
{
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
Marsh Posté le 25-05-2002 à 18:12:27
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'...
Marsh Posté le 25-05-2002 à 18:15:16
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
Marsh Posté le 25-05-2002 à 18:22:03
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);
Marsh Posté le 25-05-2002 à 17:30:14
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!”