我对编程还很陌生,我想知道是否有什么方法可以将字符串输入与数组元素进行比较?我尝试了下面的代码,但我知道这是错误的,只是不知道该怎么做。
#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;
}
您可以避免循环并使用std::find算法功能。
#include <algorithm>
//...
bool exists = (std::find(std::begin(Username), std::end(Username), login)
!= std::end(Username));
您应该使用这样的算法:
if (std::find(Username, Username + 10, login) != (Username + 10))
cout << "Loading user settings...";
else
cout << "Error: Wrong username entered. ";
您可以使用bool标志来检查用户是否存在:
//...
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?
我想您希望看到的是如果存在匹配项,则为“正在加载用户设置...”,如果没有匹配项,则为“错误:输入了错误的用户名。”。您的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)之后,才会出现此错误。让您指定此条件。