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

如何用C语言编写单词统计函数?求助解决连续空格计数问题

字符串单词计数问题的修正方案

先看你原代码里的明显问题:

  • 函数定义没加{},语法直接报错;
  • word初始值设为2完全没依据,这会直接导致计数从错误的起点开始;
  • 内层while循环条件只写了str[i + l],既没判断是不是空格,也没补全括号,逻辑完全不通;
  • 核心逻辑搞反了:你现在是遇到空格且后面有字符就计数,这刚好和“连续空格不计数”的要求相反。

正确的计数逻辑

要实现“空格分隔、首尾为边界”的单词计数,核心是只在“从空格进入非空格”的瞬间计数,这样自动忽略连续空格,同时处理首尾的边界情况。可以用一个标志位记录当前是否处于单词中:

  1. 初始化计数器count为0,标志位in_word为0(表示不在单词里);
  2. 遍历字符串的每个字符:
    • 如果当前字符不是空格,且in_word为0,说明刚进入一个新单词,计数器+1,把in_word设为1;
    • 如果当前字符是空格,把in_word设为0;
  3. 遍历结束后,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:07