我知道我可以通过以下方式检查“单词”是否全部都是字母:
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 ++,所以此操作适用于当前目的。
我的问题是如何检查字符串是否为多个“单词”?当到达空格时,函数(正确)说该空格不是字母,并告诉我输入内容只能是字母。我试着做
if((isalpha(str[i]) != 0) || (str[i] == " "))
并更改“ if”以返回false(仅输入字母和空格),并更改“ else”以返回true,但是当我尝试这样做时,出现编译器错误:
ISO C ++禁止比较指针和整数[-fpermissive]
那么,如何使用户输入的字符串只是字母或空格呢? (最好是最简单的方法)
最佳答案
这个说法:
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
关于c++ - 如何检查字符串只是字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26002132/