Vérifier si la chaîne est en chaîne (liste des chaînes)
Je suis nouveau ici et de C++. J'ai eu une certaine expérience en python, et trouvé de "si a dans b" est vraiment facile, et je me demandais si il y a un équivalent en C++.
Fond
J'ai essayé de faire une liste de chaînes et de vérifier si une entrée est dans la liste.
La raison pour laquelle je veux faire, c'est parce que je veux seulement utiliser une fonction si l'entrée sera effectivement faire quelque chose dans cette fonction. (Changement de type int coordonnées x et y dans ce cas)
Question
string myinput;
string mylist[]={"a", "b", "c"};
cin>>myinput;
//if myinput is included in mylist
//do other stuff here
Comment puis-je vérifier à l'aide d'un if
si l'entrée myinput
est inclus dans la chaîne de mylist
?
- En supposant que vous maliste aurait uniquement les valeurs uniques?
- stackoverflow.com/questions/6194797/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
std::find
:Cela fonctionne bien avec seulement trois cordes, mais si vous allez avoir beaucoup plus, vous seriez probablement mieux avec un
std::set
oustd::unordered_set
à la place.unordered_set
, vous pouvez vous attendre les insertions à O(1) ainsi.<algorithm>
Utilisation
std::find
:Si vous connaissez la taille de la liste à l'avance, je vous suggère de
std::array
qui expose les itérateurs et unsize()
fonction, ainsi que quelques autres avantages intégrées dans des tableaux. Notez que c'est le C++11 (le C++03, près équivalent eststd::vector
), et aussi avec le C++11 eststd::begin
etstd::end
, qui la réduisent à ceci:Il est assez facile de faire votre propre intégré dans les tableaux en C++03, mais avec un conteneur standard qui expose
begin()
etend()
membres, cela ne devrait pas être trop nécessaire, même si elle est plus polyvalente.find()
la recherche par le biais de la fourchette que vous spécifiez (plus facilement a noté avec le début et la fin des fonctions) et retourne la position (un itérateur) à laquelle il se trouve, ou à la fin de la plage si il ne l'est pas. C'est pourquoi vous devez comparer le résultat avec la fin de la position que vous transmettez. L'ensemble de lasizeof
affaires divise la taille totale du tableau par la taille d'un élément, donnant le nombre d'éléments, mais comme mentionné, les conteneurs standard exposer facilesize()
membre, si ce n'est pas trop utile dans ce contexte.Utilisation std::find, std::find_if algorithmes
Ou de l'utilisation de C++11
std::array
avecstd::begin()
,std::end()
Ou Lambda:
Puisque vous travaillez avec le C++ n'hésitez pas à l'aide de la bibliothèque STL:
Vous pouvez en utiliser, comme d'autres l'ont suggéré, ou vous pouvez utiliser une boucle for(easierfor débutants):
Vous pouvez également utiliser
std::count
si le nombre
> 0
, cela signifie que la chaîne est dans les cordes.