如何检查字符串是否匹配数组元素?

问题描述 投票:0回答:4

我对编程还很陌生,我想知道是否有什么方法可以将字符串输入与数组元素进行比较?我尝试了下面的代码,但我知道这是错误的,只是不知道该怎么做。

#include <iostream>

using namespace std;

int main()
{
    string Username[10] = {"name1", "name2", "name3", "name4", "name5", "name6", "name7", "name8", "name9", "name10"};
    string login;
    int i;

    cout << "Enter username login: ";
    getline(cin, login);
    cout << "\n";

    for (i = 0; i < 10; i++)
        if (login == Username[i])
        {

            cout << "Loading user settings...";
        }
        else
            cout << "Error: Wrong username entered. ";
    return 0;
}
c++ arrays string substring string-matching
4个回答
1
投票

您可以避免循环并使用std::find算法功能。

 #include <algorithm>
 //...
 bool exists = (std::find(std::begin(Username), std::end(Username), login) 
                != std::end(Username));

1
投票

您应该使用这样的算法:

if (std::find(Username, Username + 10, login) != (Username + 10))
  cout << "Loading user settings...";
else 
  cout << "Error: Wrong username entered. ";

1
投票

您可以使用bool标志来检查用户是否存在:

Running sample

//...
bool exists = false;

//...

for (i = 0; i < 10; i++)
    if (login == Username[i])
    {
        exists = true;
        break;
    } 
exists ? std::cout << "Loading user settings..." : std::cout << "Error: Wrong username entered. ";
//...

附带说明,请参见Why is "using namespace std;" considered bad practice?


0
投票

我想您希望看到的是如果存在匹配项,则为“正在加载用户设置...”,如果没有匹配项,则为“错误:输入了错误的用户名。”。您的if语句应如下所示:

if (login == Username[i]){
  cout << "Loading user settings...";
  break;
}

并且您的else陈述应为else-如果采用以下形式:

else if(i==9) cout << "Error: Wrong username entered. ";

两件事:

1] break的运行方式是,当程序看到break时,它将结束当前使用的循环。找到匹配项后,不必在数组中寻找任何其他内容,因此请突破。

2)仅当您查看了整个数组时才要打印错误,并且只有在检查了最后一个元素(在本例中为索引9)之后,才会出现此错误。让您指定此条件。

© www.soinside.com 2019 - 2024. All rights reserved.