C++ 6 ;IntelliSense:没有来自“的合适转换函数”;std::string";至;int";存在

C++ 6 ;IntelliSense:没有来自“的合适转换函数”;std::string";至;int";存在,c++,string,validation,C++,String,Validation,嘿,我正在验证一个字符串 string getString(string q) { string input; do { cout << q.c_str() << endl; cin >> input; } while (!isalpha(input)); return input; } stringgetstring(stringq) { 字符串输入; 做 { 不能输入; }而(!

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

string getString(string q)
{
    string input;

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

    return input;
}
stringgetstring(stringq)
{
字符串输入;
做
{
不能输入;
}而(!isalpha(输入));
返回输入;
}
使用
while(!isalpha(input))时输入给出了该错误

有人能帮我吗?

该函数将整数作为参数,但您正在向它传递一个
std::string
。如果字符串仅包含字母字符,则可以编写如下函数来测试:

bool   noDigitInString(std::string str)
{
  for (int i = 0; i < str.size(); i++)
  {
    if (isdigit(str[i]))
      return false;
   }
  return true;
}
bool noDigitInString(std::string str)
{
对于(int i=0;i
该函数将整数作为参数,但您将传递一个
std::string
。如果字符串仅包含字母字符,则可以编写如下函数来测试:

bool   noDigitInString(std::string str)
{
  for (int i = 0; i < str.size(); i++)
  {
    if (isdigit(str[i]))
      return false;
   }
  return true;
}
bool noDigitInString(std::string str)
{
对于(int i=0;i
描述了问题所在,但这里有一个解决方案,它使用而不是编写自己的(示例需要C++11)

bool all_alpha(std::string const&s)
{
返回std::all_of(s.cbegin()、s.cend()、static_cast(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任意数字(std::string const&s)
{
返回std::任意(s.cbegin()、s.cend()、静态强制转换(std::isdigit));
}

bool无数字(std::string const&s)
{
返回std::none_of(s.cbegin()、s.cend()、static_cast(std::isdigit));
}
使用这些函数来验证从用户接收的输入


如果不能使用C++11功能,可以修改这些函数来代替使用,并将
find_If
的返回值与
s.end()
进行比较,以确定成功/失败。

描述了问题所在,但这里有一个解决方案可以使用而不是编写自己的(示例需要C++11)

bool all_alpha(std::string const&s)
{
返回std::all_of(s.cbegin()、s.cend()、static_cast(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任意数字(std::string const&s)
{
返回std::任意(s.cbegin()、s.cend()、静态强制转换(std::isdigit));
}

bool无数字(std::string const&s)
{
返回std::none_of(s.cbegin()、s.cend()、static_cast(std::isdigit));
}
使用这些函数来验证从用户接收的输入




如果不能使用C++11功能,可以修改这些函数以改为使用,并将
find_If
的返回值与
s.end()
进行比较,以确定成功/失败。

您希望通过其中的条件实现什么?
isalpha
是一个C函数,只使用一个字符,不是?如果是这样,给它输入一个
std::string
将不起作用,因为没有字符串可以
char
int
cast.@CodingMash我已经输入了您的名字吗?当用户输入名称时。我希望他们不能输入数字。如果suer没有只输入字符串。不断提示他们,直到他们这样做。您希望通过其中的条件实现什么?
isalpha
是一个C函数,只需要一个字符,不是吗?如果是这样,给它输入一个
std::string
将不起作用,因为没有字符串可以
char
int
cast.@CodingMash我已经输入了您的名字吗?当用户输入名称时。我希望他们不能输入数字。如果suer没有只输入字符串。一直提示他们,直到他们这样做。我尝试过,但当我完成此字符串输入1=“你叫什么名字?\n”;字符串名称=getString(input1);我在方法上有一个错误。
不是字母数字字符,也不是
\n
,因此
isStringAlpha
将返回false。修改
if
语句以满足您的需要确切显示我会修改if吗?有没有类似于isalpha的函数等等…我刚拿了一个?错误仍然在发生:是的,空格也不是字母数字字符。从对您问题的评论中,我了解到您只想排除数字,然后您可以说
if(isdigit(str[I])
我尝试过这个方法,但当我完成这个字符串输入时,输入1=“您的名字是什么?\n”;字符串名称=getString(input1);我在方法上有一个错误。
不是字母数字字符,也不是
\n
,因此
isStringAlpha
将返回false。修改
if
语句以满足您的需要确切显示我会修改if吗?有没有类似于isalpha的函数等等…我刚拿了一个?错误仍然在发生:是的,空格也不是字母数字字符。从对您问题的评论中,我了解到您只想排除数字,然后您可以说
if(isdigit(str[I])
我查找了一个现有函数,但没有考虑算法+1我寻找一个现有函数,但没有考虑算法+1.