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

 


Dernière réponse
Sujet : [C] Problème avec strstr
zi_ril_wanou 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);

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
zi_ril_wanou 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);
coolboarder 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
zi_ril_wanou 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'...
youdontcare :D
 
montre plus de code, parce que là ...
coolboarder 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
youdontcare ç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.
coolboarder 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.
youdontcare soit plus précis / montre ton code, ça a tout l'air d'être un bug SS (simple & sournois).
coolboarder 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

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)