我知道我可以通过以下方式检查“单词”是否全部都是字母:

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/

10-11 05:38
查看更多