我知道我可以查看一个"字"是所有的信件:
bool checkAlpha(string str){
bool retVal;
for(int i = 0; i < str.size(); i++){
if(isalpha(str[i]) == 0){
retVal = true;
cout << "Input must only contain letters\n";
break;
}
else{
retVal = false;
cout << "all good\n";
}
}
return retVal;
}
由于我如何使用函数返回值,如果它不是所有字母,我需要它返回TRUE,如果它是所有字母,则返回FALSE。这可能是一种更简单的方法,但我刚开始使用C ++,所以这适用于我目前的目的。
我的问题是如何检查字符串是否为多个字符&#34;?当它到达一个空间时,函数(正确地)表示空间不是alpha并且告诉我输入必须只是字母。我试着做了
if((isalpha(str[i]) != 0) || (str[i] == " "))
并更改&#34; if&#34;返回false(仅输入字母和空格)和&#34;否则&#34;返回true,但是当我尝试这个时,我遇到了编译器错误:
ISO C ++禁止指针和整数[-fpermissive]
之间的比较那么我该怎么做才能得到一串用户输入只是字母或空格? (最好是最简单的方法)
答案 0 :(得分:2)
本声明:
str[i] == " "
不正确,应该是:
str[i] == ' '
但更好
isspace( str[i] )
因为您的条件不会检查其他符号,例如标签等。
你也有逻辑中断,如果你遇到的不是alpha而不是空格,你可以将retVal设置为true(并且还应该在你已经得到答案时终止循环),但是你不能将它设置为false。所以你的更正代码可能是:
bool checkAlpha(const string &str){
bool retVal = false;
for(int i = 0; i < str.size(); i++){
if( !isalpha(str[i]) || !isspace(str[i]){
retVal = true;
cout << "Input must only contain letters\n";
break;
}
}
if( !retval )
cout << "all good\n";
return retVal;
}
如果您不需要提供诊断消息,则功能可以简单如下:
bool checkAlpha(const string &str){
for(int i = 0; i < str.size(); i++)
if( !isalpha(str[i]) || !isspace(str[i])
return true;
return false;
}
并且您的函数名称令人困惑,根据返回值,它应该被称为checkNotAlpha
答案 1 :(得分:0)
我想它应该足够修复如下:
if((isalpha(str[i]) != 0) || (str[i] == ' '))