检查是否有惩罚

时间:2017-09-28 02:55:04

标签: c++ arrays loops for-loop if-statement

因此,目标是检查C样式字符串是否以句点或感叹号结尾。但是,出于某种原因,我一直都是假的。

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[x-1] != '.') return false;
        if (s[x-1] != '!') return false;
    }
    return true;
}
int main()
{
    std::string str = "Smelly.";
    reverse(str.c_str());

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

到目前为止我所拥有的。但是当我添加最后一个if语句来处理感叹号时,它返回零。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

首先,注意s[x-1]是循环不变量,因此您宁愿将其移出for循环

    if (s[x-1] != '.') return false;
    if (s[x-1] != '!') return false;

这总是假的(char不能 一个点一个解释标记)。 测试应该是

    if (s[x-1] != '.' && s[x-1] != '!') return false;