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

C++如何统计字符串sentence的单词数,类成员函数实现相关疑问

问题解答

返回统计结果的变量选择

你代码中定义的word变量本身就是用来累计单词数量的,直接返回这个变量即可。但你现有代码的else分支存在逻辑错误:只要遇到非字母字符就直接return 0,这会导致字符串里只要出现空格、数字、标点等非字母内容,就会直接终止统计返回0,完全不符合单词统计的实际需求。

是否需要手动自增i移动字符

不需要,你使用的for (i = 0; sentence[i] != '\0'; i++)循环已经设定了每次循环结束后自动执行i++遍历下一个字符,你在循环内部多次手动写i++会导致大量字符被跳过,甚至可能访问到字符串结束符\0之后的非法内存,触发未定义行为。


修正后的代码参考

单词统计的核心逻辑是检测「新单词的起始位置」:当当前字符是字母,且前一个字符不是字母(或处于字符串开头)时,才给单词计数+1,避免重复计数:

int Directive::words(const char* sentence) {
    int i, word = 0;
    // 标记当前是否处于单词内部
    bool in_word = false;

    for (i = 0; sentence[i] != '\0'; i++) {
        // 判断当前字符是不是字母
        bool is_alpha = (sentence[i] >= 'a' && sentence[i] <= 'z') || (sentence[i] >= 'A' && sentence[i] <= 'Z');
        if (is_alpha) {
            if (!in_word) {
                // 刚进入一个新单词,计数+1
                word++;
                in_word = true;
            }
        } else {
            // 遇到非字母,标记不在单词内部
            in_word = false;
        }
    }
    return word;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:24:07