我正在寻找一种方法来检查用户在提示时输入的字符串(让我们把它变成一个字符串变量“userinput”)来自10个其他字符串的数组。到目前为止,我有:
while (userinput.empty()) //Check for empty input
{
cout << "Please enter your identity.\n"; //Identify user
getline(cin, userinput);
do //Check to see if user is the same as the string variable "user"
{
cout << "This user is either non existent or has access privileges revoked.\n"; //Wrong username!
cout << "Please re-enter the username.\n";
getline(cin, userinput);
}
while (user != userinput);
}
可以看出,这仅适用于单个字符串变量“user”。我如何更改字符串数组?
数组本身如下:
string arr[10] = {"Test1", "Test2", "Test3", "Test4", "Test5", "Test6", "Test7", "Test8", "Test9", "Test10"};
请注意:我不打算使用密码,只打算使用用户名。
答案 0 :(得分:3)
您可以使用内置的count
功能,如下所示:
do{
getline(cin, userinput);
}
while(!std::count(arr, arr+10, userinput));
同样在ideone。
这就是你的循环看起来的样子:
cout << "Please enter your identity.\n"; //Identify user
getline(cin, userinput);
while (!std::count(arr, arr+10, userinput)) //Check to see if user is the same as the string variable "user"
{
cout << "This user is either non existent or has access privileges revoked.\n"; //Wrong username!
cout << "Please re-enter the username.\n";
getline(cin, userinput);
}
你可以看到它here。
答案 1 :(得分:2)
将支票放入单独的功能
bool isValidUserName(const string& input) {
for(int i = 0; i < 10; ++i) {
if(input == arr[i]) {
return true;
}
}
return false;
}
并将其用作while中的条件
while (!isValidUserName(userinput));
答案 2 :(得分:1)
如果要比较大量的字符串,那么使用哈希映射(std::unordered_set
)而不是数组会更有效。在哈希表中搜索比在数组中快得多。
unordered_set<string> valid_inputs {"Test1", "Test2", "Test3", "Test4", "Test5", "Test6"};
然后您可以通过以下方式检查用户输入:
if (valid_inputs.find(user_input) == valid_inputs.end())
cout << "error";
else
cout << "success";