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
相关产品推荐
相关产品推荐

