C++ 检查用户输入是否等于数组元素

C++ 检查用户输入是否等于数组元素,c++,C++,我有一个具有多个名称的字符串数组。 我想使用if语句检查用户输入是否等于任何名称 例如: names[5] = {'david','rares','tudor','john','jay'} cin>>name; 现在我想检查name是否等于数组中的任何元素 非常糟糕的例子: if(name == names) { cout<<"you can use this name. Name: "<<name; } if(name==names) { 正如用户4

我有一个具有多个名称的字符串数组。 我想使用if语句检查用户输入是否等于任何名称

例如:

names[5] = {'david','rares','tudor','john','jay'}

cin>>name;
现在我想检查name是否等于数组中的任何元素

非常糟糕的例子:

if(name == names) 
{
cout<<"you can use this name. Name: "<<name;
}
if(name==names)
{

正如用户4581301所指出的,
'david'
不是一个字符串,而是一个多字节字符(很可能也是无效的)。如果您想保留一组名称并检查其中是否存在某个名称,可以使用
std::set
std::无序集
而不是数组。例如:

#include <iostream>
#include <set>
#include <string>

int main() {
    std::set<std::string> names = {"david", "rares", "tudor", "john", "jay"};
    std::string name;

    std::cin >> name;
    if(names.count(name)) // or names.contains(name) in C++20
        std::cout << "found\n";
    else
        std::cout << "not found\n";
}
#包括
#包括
#包括
int main(){
std::set name={“david”、“rares”、“tudor”、“john”、“jay”};
std::字符串名;
std::cin>>名称;
C++20中的if(names.count(name))//或names.contains(name)

std::cout您可以这样做:

#include <iostream>
#include <algorithm>

int main()
{
    const char * v [] = { "david", "rares", "tudor", "john", "jay" };
    std::string name;
    std::cin >> name;
    auto result = std::find (std::begin (v), std::end (v), name);
    if (result != std::end (v))
        std::cout << name << " is valid\n";
}
#包括

#include

我建议使用一个向量来存储名称,以便您知道自己的大小。如果必须使用静态数组,请确保保存当前大小,并在删除/添加名称时进行更新

有些人可能有更有效的解决方案,但您可以使用for循环在数组中进行线性搜索

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string name;
    string names[5] = {"david","rares","tudor","john","jay"};
    cout << "Enter name: ";
    cin >> name;

    for (int i = 0; i < 5; i++)
    {
        if(names[i] == name)
        {
            cout << name << " was found in the array." << endl;
            return 0;
        }
    }

    cout << name << " wasn't found in the array." << endl;
    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
字符串名;
字符串名[5]={“大卫”、“稀有”、“都铎”、“约翰”、“杰伊”};
姓名;
对于(int i=0;i<5;i++)
{
如果(名称[i]==名称)
{

cout Hi!更简单的方法是对
循环使用
,并检查每个元素:)
'david'
是一个多字节字符,而不是字符串。编译器可能会就此向您发出警告。请改用
“david”
。同时注意大小写。
“david”
“david”不匹配
对于在列表中查找一个值很有用。有没有不使用std的方法?当然,您可以使用std::cin,std::cout;
执行
操作,然后如果您经常使用这些操作,则跳过
std:
。您甚至可以使用整个命名空间
std
,但这就是问题。