检查字符串是否匹配字符串数组中的任何字符串?

时间:2014-07-19 08:29:13

标签: c++ arrays string

我正在寻找一种方法来检查用户在提示时输入的字符串(让我们把它变成一个字符串变量“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"};

请注意:我不打算使用密码,只打算使用用户名。

3 个答案:

答案 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";