检查特定字符

Checking for specific chars

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

这是我的。

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


    for (int c = 0; s[c] != '[=10=]'; 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");

}

然而,我一直认为这不是一个句子,即使它应该是。关于如何解决这个问题有什么建议吗?

问题似乎是因为您从索引 0 开始循环并检查第一个字符是否应为大写,而在后面的语句中,您再次检查它是否应为小写。

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

以后

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

在第一次迭代期间,当 c 等于 0 时,您基本上是在检查第一个字符既不应该是大写也不是小写,并且您得到 false,因为其中一个总是 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");
}

希望对您有所帮助!!