You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言count_sentences函数无法正确统计多个句子结束符问题

问题原因

strcmp的作用是比较两个以\0为终止符的完整字符串,传入&text[i]作为参数时,函数会从下标i的位置一直遍历到字符串末尾做整串比对,而非仅比较当前位置的单个字符。
只有当i刚好是字符串最后一个字符的下标,且该字符为?/!/.三者之一时,从i位置开始的子串才会和长度为1的比较目标完全相等,触发计数,这就是代码无论包含多少个结束符最多只计1次、且仅末尾是结束符才计数的核心原因。
另外当前循环每一轮都调用strlen计算字符串长度,strlen本身需要从头遍历字符串到终止符才能返回结果,长文本场景下会产生不必要的性能损耗。

修复方案

单字符判断不需要调用字符串比较函数,直接取当前下标位置的字符值和目标字符比对即可,同时可以提前计算一次字符串长度复用,避免重复计算。
修正后的代码如下:

int count_sentences(string text) {
    int count = 0;
    int text_len = strlen(text);
    for (int i = 0; i < text_len; i++) {
        char cur = text[i];
        if (cur == '?' || cur == '!' || cur == '.') {
            count += 1;
        }
    }
    return count;
}

可选优化

如果需要处理连续多个结束符(例如Hi!! How are you??)重复计数的场景,可以额外加一层判断,仅当前一个字符不是结束符时,才对当前位置的结束符计数,避免把连续标点算成多个句子。

内容的提问来源于stack exchange,提问作者Nour11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:36:43