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

C++实现字符串单词计数功能代码调试求助

单词统计函数问题修正说明

现有代码存在的问题

  • 函数定义参数末尾多了多余的逗号,会直接触发语法错误
  • while循环语法错误:没有初始化循环变量i,也没有在循环体中对i进行自增操作,会导致无法遍历字符串甚至触发死循环
  • 字符比较错误:用双引号包裹的" "、"\n"是字符串常量,单个字符比较应该用单引号' '、'\n'
  • 判断逻辑错误:一个字符不可能同时等于空格和换行,这里应该用逻辑或||而非逻辑与&&
  • 代码结构不完整:缺少循环体、函数的闭合大括号,也没有返回统计值的语句
  • 边界场景逻辑错误:初始标记值设置错误,没有处理字符串开头/结尾有空白、连续多个空白字符的场景

修正后的完整代码

#include <string>
using namespace std; // 若项目中已经全局引入该命名空间可省略

int numWords(string wordnum) {
    int counting = 0;
    int isSpace = 1; // 初始标记为空白状态,避免开头空白导致计数错误
    int i = 0;
    while(i < wordnum.length()) {
        // 兼容空格、换行、制表符三类常见空白分隔符
        if(wordnum[i] == ' ' || wordnum[i] == '\n' || wordnum[i] == '\t') {
            isSpace = 1;
        } else if(isSpace == 1) {
            // 非空白状态+之前是空白,说明遇到新单词
            isSpace = 0;
            counting++;  
        }
        i++; // 每次循环移动到下一个字符
    }
    return counting;
}

逻辑说明

该实现采用状态标记法统计单词,核心逻辑为:

  • 用isSpace标记当前位置是否处于空白区间,初始值设为1可避免字符串开头的空白被误判为单词
  • 遍历到空白字符时就重置空白标记,遍历到非空白字符时如果之前是空白状态,就判定为遇到新单词,计数加1同时更新标记
  • 天然支持连续多个空白、字符串首尾空白的场景,适配绝大多数日常使用需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:27:03