如何用C语言编写单词统计函数?求助解决连续空格计数问题
字符串单词计数问题的修正方案
先看你原代码里的明显问题:
- 函数定义没加
{},语法直接报错; word初始值设为2完全没依据,这会直接导致计数从错误的起点开始;- 内层
while循环条件只写了str[i + l],既没判断是不是空格,也没补全括号,逻辑完全不通; - 核心逻辑搞反了:你现在是遇到空格且后面有字符就计数,这刚好和“连续空格不计数”的要求相反。
正确的计数逻辑
要实现“空格分隔、首尾为边界”的单词计数,核心是只在“从空格进入非空格”的瞬间计数,这样自动忽略连续空格,同时处理首尾的边界情况。可以用一个标志位记录当前是否处于单词中:
- 初始化计数器
count为0,标志位in_word为0(表示不在单词里); - 遍历字符串的每个字符:
- 如果当前字符不是空格,且
in_word为0,说明刚进入一个新单词,计数器+1,把in_word设为1; - 如果当前字符是空格,把
in_word设为0;
- 如果当前字符不是空格,且
- 遍历结束后,
count就是单词总数。
修正后的代码
int count_words(char *str) { int count = 0; int in_word = 0; // 0表示不在单词中,1表示在单词中 while (*str != '\0') // 遍历字符串直到结束符 { if (*str != ' ') { if (!in_word) // 刚从空格进入非空格,新单词开始 { count++; in_word = 1; } } else { in_word = 0; // 遇到空格,退出单词状态 } str++; // 移动到下一个字符 } return count; }
测试场景验证
- 空字符串:返回0;
- 开头有连续空格:
" hello world",返回2; - 中间连续空格:
"hello world test",返回3; - 结尾有空格:
"hello world ",返回2; - 单个单词:
"test",返回1。
内容的提问来源于stack exchange,提问作者nobody really
相关产品推荐
相关产品推荐

