我知道我可以通过以下方式检查“单词”是否都是字母:
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;
}
Run Code Online (Sandbox Code Playgroud)
由于我如何使用函数返回值,如果不是所有字母,我需要它返回 TRUE,如果不是所有字母,我需要它返回 FALSE。可能有一种更简单的方法可以做到这一点,但我刚刚开始使用 C++,所以这适合我当前的目的。
我的问题是如何检查字符串是否是多个“单词”?当它到达一个空格时,该函数(正确地)说该空格不是字母,并告诉我输入只能是字母。我尝试做
if((isalpha(str[i]) != 0) || (str[i] == " "))
Run Code Online (Sandbox Code Playgroud)
并将“if”更改为返回 false(仅输入字母和空格),将“else”更改为返回 true,但是当我尝试此操作时,出现编译器错误:
ISO C++ 禁止指针和整数之间的比较 [-fpermissive]
那么我该怎么做才能让用户输入的字符串只是字母或空格呢?(最好是最简单的方法)
这个说法:
str[i] == " "
Run Code Online (Sandbox Code Playgroud)
不正确,应该是:
str[i] == ' '
Run Code Online (Sandbox Code Playgroud)
但更好
isspace( str[i] )
Run Code Online (Sandbox Code Playgroud)
因为您的条件不会检查其他符号,例如制表符等。
另外,你在逻辑上有中断,如果你遇到的不是 alpha 也不是 space,你可以将 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;
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要提供诊断消息,功能可以简单如下:
bool checkAlpha(const string &str){
for(int i = 0; i < str.size(); i++)
if( !isalpha(str[i]) || !isspace(str[i])
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
而且您的函数名称很混乱,根据返回值应该调用它checkNotAlpha