0

嘿,我正在验证一个字符串。

string getString(string q)
{
    string input;

    do
    {
        cout << q.c_str() << endl;
        cin >> input;
    } while (!isalpha(input));

    return input;
}

使用while(!isalpha(input)); 输入时会出现该错误。

谁能帮我这个?

4

2 回答 2

2

另一个答案描述了问题所在,但这是一个使用标准库中的算法而不是自己编写的解决方案(示例需要 C++11 )

bool all_alpha( std::string const& s )
{
  return std::all_of( s.cbegin(), s.cend(), static_cast<int(*)(int)>(std::isalpha) );
}

仅当字符串中的所有字符都是字母时,上述函数才会返回 true。如果您只想禁止数字字符,我会使用稍微不同的功能。

bool any_digit( std::string const& s )
{
  return std::any_of( s.cbegin(), s.cend(), static_cast<int(*)(int)>(std::isdigit) );
}

或者

bool no_digits( std::string const& s )
{
  return std::none_of( s.cbegin(), s.cend(), static_cast<int(*)(int)>(std::isdigit) );
}

使用这些函数来验证您从用户那里收到的输入。


如果不能使用C++11的特性,可以修改函数来std::find_if代替使用,比较find_ifto的返回值s.end()判断成功/失败。

于 2012-10-18T16:22:58.523 回答
1

isalpha函数将整数作为参数,但您传递给它的是一个std::string. 您可以编写这样的函数来测试您的字符串是否仅包含字母字符:

bool   noDigitInString(std::string str)
{
  for (int i = 0; i < str.size(); i++)
  {
    if (isdigit(str[i]))
      return false;
   }
  return true;
}
于 2012-10-18T16:06:32.143 回答