6 IntelliSense:没有合适的从“std :: string”到“int”的转换函数

时间:2012-10-18 16:01:13

标签: c++ string validation

嘿我验证一个字符串。

string getString(string q)
{
    string input;

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

    return input;
}

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

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:2)

other answer描述了问题所在,但这里有一个使用algorithms from the standard library而不是编写自己的解决方案(示例需要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_if的返回值与s.end()进行比较以确定成功/故障。

答案 1 :(得分: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;
}