[C++] Programmer un "moteur de recherche" ?

Programmer un "moteur de recherche" ? [C++] - C++ - Programmation

Marsh Posté le 09-08-2005 à 22:53:59    

Salut à tous,
 
Je ne sais pas si le titre correspond totalement au sujet mais bon on verra bien ce n´est pas grave.
 
Voila dans mon programme je voudrais ajouter une fonction de recherche mais je ne suis qu´un débutant et je ne ne connais pas toutes les notions.
 
Pour éviter de vous encombrer avec de l´inutile je ne posterai pas mon code source. Car c´est une fonction à part entière.
 
Admettons ce code :
 

Code :
  1. #include <iostream>
  2. #include <liste.h>
  3. using std::cout:
  4. using std::cin;
  5. //A cet endroit un prototype de la fonction "  Recherche" de recherche dans la liste (  liste.h).
  6. int main()
  7. {
  8. char Nom[64];
  9. char Resultat[64];
  10. cout << "Que recherchez-vous dans la liste ? "  ;
  11. cin >> Nom;
  12. cout << endl;
  13. Resultat = Recherche(Nom); //Donc il faut que la fonction Recherche retourne une valeur Char.
  14. cout << Resultat << " : etait-ce bien ce que vous cherchiez ?\n"
  15. system("PAUSE" );
  16. return 0;
  17. }


 
En fait voila je souhaiterai tout simplement savoir comment faire un fichier "liste.h" contenant des mots, composés ou non (très important !) et une fonction qui puissent rechercher dans ce fichier le mot voulu.
 
J´ai vraiment beaucoup de mal à le mettre en oeuvre. Je ne parviens pas à trouver une solution. En fait il faudrait une fonction qui compare le mot recherché à un mot de la liste et qui passe au mot suivant si le mot ne correspond pas etc...
 
J´ai pensé à strcmp(Chaine1,Chaine2) mais comment rendre ce truc plus ergonomique et plus compact (  car faire des comparaison entre chaque mot d´une liste de 300 mots par exemple imaginer le truc quoi...).
 
Aussi comment faire pour que la fonction est la capacité de me donner plus de 1 résultat ?
 
De plus comment faire des chaines avec des espaces entre les mots ?
 
Aussi question subsidiaire : Comment afficher les caractères spéciaux dans une phrase ?  
Exemple :

Code :
  1. std::cout << "Je vais à la pêche"; //Ci-contre le "à" et le "ê" en plein milieu de phrase


 
 
Merci beaucoup de vos réponses car vraiment je suis en difficulté phénoménale pour mon niveau :)

Reply

Marsh Posté le 09-08-2005 à 22:53:59   

Reply

Marsh Posté le 10-08-2005 à 02:27:50    

au hasard, préparser la liste et l'organiser en un arbre , si tu es courageux y'a la très bonne doc la dessus dans le "Sorting and Searching" de Knuth ;)
 
sinon pour qu'elle puisse te retourner plusieurs résultats, m'est-avis qu'une liste chainée de pointeurs vers les chaines trouvées serait un format potable ;)
 


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 11-08-2005 à 13:03:18    

sI J4AI BIEN COMPRIS TU VOUDRAIS AVOIR UNE STRUCTURE DANS LAQUELLE TU STOCKES DES PHRASES (MOT OU MOT COMOSOPéS) ET UNE FONCTION QUI PUISSE TE RETOURNER LE RESULTAT DE TA RECHERCHE.
SI C EST CA MOI JE TE CONSEILLE DE STOCKER tes infos dans un CStringArray (c'est un type prédéini: tableau ce CSTRING) et de passer en paramètre de ta fonction un CString, il te suffira de faire la comparaison avec chaque case de ton tableau, et si le résultat est bon, tu ajoutes cette valeur dans un nouveau CStringArray (ça sera la valeur retour de ta fonction, déclare le en tant que pointeur sur CStringArray), fais attention à "resizer" à chaque nouvel ajout dans ton tableau.
J'espère que c'est assez claire

Reply

Marsh Posté le 11-08-2005 à 13:33:57    

Et pourquoi pas un std::vector<std::string> ?? Tu peux stocker plusieurs chaînes dedans et ca marche très bien!!  
 
Sinon, l'idée de préparser les mots et de les organiser me parait bien aussi... Ou peut être déjà un tri alphabétique et plusieurs fichiers... ou trouver des catégories de recherches...

Reply

Marsh Posté le 16-08-2005 à 09:34:58    

zied3 a écrit :

sI J4AI BIEN COMPRIS TU VOUDRAIS AVOIR UNE STRUCTURE DANS LAQUELLE TU STOCKES DES PHRASES (MOT OU MOT COMOSOPéS) ET UNE FONCTION QUI PUISSE TE RETOURNER LE RESULTAT DE TA RECHERCHE.
SI C EST CA MOI JE TE CONSEILLE DE STOCKER tes infos dans un CStringArray (c'est un type prédéini: tableau ce CSTRING) et de passer en paramètre de ta fonction un CString, il te suffira de faire la comparaison avec chaque case de ton tableau, et si le résultat est bon, tu ajoutes cette valeur dans un nouveau CStringArray (ça sera la valeur retour de ta fonction, déclare le en tant que pointeur sur CStringArray), fais attention à "resizer" à chaque nouvel ajout dans ton tableau.
J'espère que c'est assez claire


 
horreur :ouch:


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 16-08-2005 à 14:05:21    

Oublie les char *, utilise std::string.
Avec une map tu peux associer un résultat à un mot (string).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 16-08-2005 à 16:36:21    

set/map/hash_map

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed