如何检查字符串只是字母

时间:2014-09-23 18:22:48

标签: c++ string

我知道我可以查看一个"字"是所有的信件:

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]

之间的比较

那么我该怎么做才能得到一串用户输入只是字母或空格? (最好是最简单的方法)

2 个答案:

答案 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] == ' '))