[RESOLU] Recherche d'un string dans un tableau

Recherche d'un string dans un tableau [RESOLU] - C++ - Programmation

Marsh Posté le 28-07-2005 à 15:50:57    

Bonjour à tous,
 
je voudrais juste savoir s'il y a une fonction qui fait ca ou s'il faut que je la code moi même!
 
J'ai un tableau :
 
string actions[] = {"taper","lancer","jouer"}
 
et un string mon_action.
 
Je cherche une fonction du genre bool rechercher(mon_action,actions) et qui me renvoie vrai si la chaine mon_action est présente dans le tableau actions...
 
C'est pas dur à coder mais si ca existe, c'est surement mieux de prendre une fonction toute faite!
 
Merci d'avance pour votre aide.
 
p1c0.


Message édité par _p1c0_ le 29-07-2005 à 10:53:31

---------------
-_- http://www.scienceshopping.com -_-
Reply

Marsh Posté le 28-07-2005 à 15:50:57   

Reply

Marsh Posté le 28-07-2005 à 16:53:46    

utilise donc un conteneur de la STL, genre vector<>, qui possède toutes les méthodes nécessaires, plutot qu'un tableau C-Style (machin[])


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 28-07-2005 à 17:01:32    

si tu es contraint d'utiliser des tableaux, tu peux aussi utiliser std::find() avec les adresses de début et de fin de tableau en guise d'itérateur de début et de fin respectivement.

Reply

Marsh Posté le 28-07-2005 à 17:50:08    

Non non, j'ai fini utiliser un vector, ca me parait mieux...
 
J'ai codé une boucle pour rechercher mais je me pose la question suivante :
 
pourquoi c'est mieux d'utiliser un iterator plutot que de faire vec[i] ?? Ca va vraiment plus vite?
 
Merci pour vos explications...


---------------
-_- http://www.scienceshopping.com -_-
Reply

Marsh Posté le 28-07-2005 à 17:53:23    

non, utiliser un iterator n'ira pas plus vite que manipuler des pointeurs, par contre, manipuler un std::vector est largement plus aisé (et flexible) que d'avoir a se servir d'un tableau string x[]

Reply

Marsh Posté le 28-07-2005 à 17:58:04    

Oui mais dans mon cas, le nombre de string contenues par le vector est toujours le même donc si je fais :
 

Code :
  1. for(int i=0; i<vec.size(); i++){
  2.   if(strcmp(vec[i].c_str(),chaine.c_str()) == 0)
  3.     return true;
  4. }
  5. return false;


 
ou vec est un vector <string> et chaine un string
c'est suffisant non?


Message édité par _p1c0_ le 28-07-2005 à 17:59:11

---------------
-_- http://www.scienceshopping.com -_-
Reply

Marsh Posté le 28-07-2005 à 18:05:03    

:heink:
 
pourquoi passes-tu par des strcmp tout droit issus du C alors que tu as de beaux opérateurs définis sur tes strings ?
Et les itérateurs ne sont pas là que pour les fonctions de la stl :o
 
remplace-moi ca par un truc du style :

Code :
  1. for(std::vector<std::string>::const_iterator i=vect.begin(); i!=vec.end(); i++){
  2.   if(*i == chaine)
  3.     return true;
  4. }
  5. return false;


 
 
edit : correction pour cohérence du code (oubli d'un std:: :p)


Message édité par theshockwave le 28-07-2005 à 18:35:05
Reply

Marsh Posté le 28-07-2005 à 20:26:37    

et std::find() c'est pour les babouins ??

Reply

Marsh Posté le 29-07-2005 à 07:55:58    

_p1c0_ a écrit :

ou vec est un vector <string> et chaine un string
c'est suffisant non?


non, c'est même faux. Une std::string n'est pas délimité par un '\0'. strlen(s.c_str()) <= s.size(). Donc tu risques de ne comparer qu'une portion de tes chaines. operator== fait le boulot comme il faut. et comme dit joelf, std::find le fait encore mieux.

Reply

Marsh Posté le 29-07-2005 à 07:56:53    

theshockwave a écrit :


[cpp]for(std::vector<std::string>::const_iterator i=vect.begin(); i!=vec.end(); i++){


http://forum.hardware.fr/hardwaref [...] 9981-1.htm

Reply

Marsh Posté le 29-07-2005 à 07:56:53   

Reply

Marsh Posté le 29-07-2005 à 08:46:11    

Joel F a écrit :

et std::find() c'est pour les babouins ??


 
En fait, en faisant mes recherches sur google, j'ai pas trouvé vraiment de document où toutes les méthodes sont répertoriées... Si vous avez un bon lien, je suis preneur!
 
J'ai donc fini par utiliser std::find() et ca marche très bien!!  :D  
 
Merci à tous!  :p  


---------------
-_- http://www.scienceshopping.com -_-
Reply

Marsh Posté le 29-07-2005 à 09:45:24    

Citation :

et std::find() c'est pour les babouins ??


 


 
Oui, bon, j'ai honte, j'ai pas cherché à comprendre ce qu'il faisait en détails et j'ai juste modifié son exemple plutôt que réécrit une autre version :o

Reply

Marsh Posté le 29-07-2005 à 10:27:14    

_p1c0_ a écrit :

Si vous avez un bon lien, je suis preneur!


 
http://wwwasd.web.cern.ch/wwwasd/l [...] assref.htm ->tout ce qui faut
http://www.sgi.com/tech/stl/index.html  ->le site de la stl
 
sinon google
tu cherches stl c++ et ce que tu veux
(ex stl c++ vector)  :)

Reply

Marsh Posté le 29-07-2005 à 10:53:04    

Merci beaucoup, je vais noter tout ca!!  ;)


---------------
-_- http://www.scienceshopping.com -_-
Reply

Sujets relatifs:

Leave a Replay

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