【问题标题】:Checking for puncuation检查标点符号
【发布时间】:2017-09-28 02:55:03
【问题描述】:

因此,目标是检查 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 语句来处理感叹号时,它返回零。有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    这总是错误的(一个字符不能既是一个点一个解释标记)。 测试应该是

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

    【讨论】:

    • 这是真的,但是即使修复了,显示的代码仍然是错误的。不完整的答案。
    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多