我是新来的C ++。我在python中有过一些经验,发现“如果a b in”真的很容易,我想知道C ++中是否有相同的东西。
背景
我一直在尝试创建字符串列表并检查输入是否在该列表中。 我想这样做的原因是因为我想只使用一个函数,如果输入实际上在该函数中做了一些事情。 (在这种情况下改变int x和y坐标)
问题
string myinput;
string mylist[]={"a", "b", "c"};
cin>>myinput;
//if myinput is included in mylist
//do other stuff here
如何使用if
检查输入myinput
是否包含在字符串mylist
中?
答案 0 :(得分:13)
您可以使用std::find
:
std::string myinput;
std::vector<std::string> mylist{"a", "b", "c"};
std::cin >> myinput;
if (std::find(std::begin(mylist), std::end(mylist), myinput) != std::end(mylist))
// myinput is included in mylist.
只有三个字符串才能正常工作,但如果您还有更多字符串,那么使用std::set
或std::unordered_set
可能会更好。
std::set<std::string> myset;
// put "a", "b", and "c" into the set here
std::cin >> myinput;
if (myset.find(myinput) != myset.end())
// myinput is included in myset.
答案 1 :(得分:2)
使用std::find
:
std::size_t listsize = sizeof mylist / sizeof mylist[0];
if (std::find(mylist, mylist + listsize, myinput) != mylist + listsize) {
//found
}
如果您事先知道列表的大小,我建议std::array
公开迭代器和size()
函数,以及内置数组的其他一些好处。请注意,这只是C ++ 11(C ++ 03接近等效的是std::vector
),还有C ++ 11来自std::begin
和std::end
,这会将其减少到此:
if (std::find(std::begin(mylist), std::end(mylist), myinput) != std::end(mylist))
在C ++ 03中为内置数组创建自己的内容相当容易,但是使用标准容器公开begin()
和end()
成员,这不是太必要,虽然它更通用。
答案 2 :(得分:2)
string myinput;
string mylist[]={"a", "b", "c"};
std::string *begin = mylist;
std::string *end = mylist + 3;
if (std::find(begin, end, "b") != end)
{
std::cout << "find" << std::endl;
}
或者将C ++ 11 std::array
与std::begin()
,std::end()
std::array<std::string, 3> mylist = { "a", "b", "c" };
if (std::find(std::begin(mylist), std::end(mylist), "b") != std::end(mylist))
{
cout << "find" << endl;
}
Or Lambda:
if (std::find_if(std::begin(mylist), std::end(mylist),
[](const std::string& s){ return s == "b";}) != std::end(mylist))
答案 3 :(得分:1)
由于您正在使用C ++,因此请不要犹豫使用STL库:
string mylist[]={"a", "b", "c"};
vector<string> myvector(mylist, mylist + sizeof(mylist)/sizeof(mylist[0]));
if (find(myvector.begin(), myvector.end(), mystring) != myvector.end()) {
..
}
答案 4 :(得分:0)
if (find(mylist, &mylist[3], myinput) != &mylist[3])
...
答案 5 :(得分:0)
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string myinput;
string mylist[]={"a", "b", "c"};
if (cin >> myinput &&
std::find(std::begin(mylist), std::end(mylist), myinput) == std::end(mylist))
{
// do other stuff
}
}
答案 6 :(得分:0)
你可以像其他建议一样使用find,或者你可以使用for循环(更容易为初学者):
for (int i = 0; i < mylist.size() ; i ++){
if (myinput == mylist[i]){
//Do Stuff
}
答案 7 :(得分:0)
您也可以使用std::count
#include <iostream>
#include <algorithm> // std::count
#include <vector>
//using namespace std;
int main() {
std::vector<std::string> ans = {"a", "b", "c", "a"};
std::cout << count(ans.begin(), ans.end(), "a") << std::endl;
return 0;
}
如果数字为> 0
,则表示字符串在字符串中。