检查特定字符

时间:2017-09-28 03:52:43

标签: function loops boolean case-sensitive c-strings

我在检查字符串中的特定字符时遇到了一些困难。该函数的要求是检查以确保“所有字符(第一个除外)是小写,空格或标点符号(仅';'或',')”我还必须确保C-String中的最后一个字符是一个!或者a。

这就是我所拥有的。

bool isItSentence(const char* s)
{
    int x = strlen(s);


    for (int c = 0; s[c] != '\0'; c++)
    {
        if (!isupper(s[0])) return false;
        if (isupper(s[c]) && c > 0) return false;   
        if (s[c] != ' ' && s[c] != ';' && s[c] != ',' && !islower(s[c])) return false;

    }

    if (s[x - 1] != '.' && s[x - 1] != '!') return false;
    return true;
}
int main()
{
    std::string str = "Smelly.";


    std::cout << isItSentence(str.c_str()) << std::endl;
    system("pause");

}

然而,我一直认为这不是一句话,即使它应该是。关于我如何解决这个问题的任何建议?

1 个答案:

答案 0 :(得分:0)

问题似乎正在发生,因为你从索引0循环并检查第一个字符应该是大写,在后面的语句中,你再次检查它应该是小写。

if (!isupper(s[0])) return false;

以后

if (s[c] != ' ' && s[c] != ';' && s[c] != ',' && !islower(s[c])) return false;

在第一次迭代期间,当c等于0时,您基本上检查第一个字符既不应该是大写也不是小写,并且您将得到错误,因为其中一个将始终为false。以下代码应该这样做。

bool isItSentence(const char* s)
{
    int x = strlen(s);
    if (!isupper(s[0])) return false;
    if (s[x - 1] != '.' && s[x - 1] != '!') return false;
    for (int c = 0; c < x - 1; c++)
    {

        if (isupper(s[c]) && c > 0) return false; 
        if (s[c] != ' ' && s[c] != ';' && s[c] != ',') 
        if(!islower(s[c]) && c!= 0)
        return false;

    }
    return true;
}
int main()
{
    std::string str = "Smelly.";
    std::cout <<" This is "<<isItSentence(str.c_str()) << std::endl;
    system("pause");
}

希望它有所帮助!!