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

为何我的C程序统计文本文件单词数的结果不正确?

问题分析与解决方案

你的代码逻辑存在根本问题:只要碰到空白字符就直接给单词数加1,但连续的空白(比如多个换行、空格)会被重复计数,而且没有区分“单词开始/结束”的正确边界。

看你的测试文本:

Hi, we are here.

huio klhi

里面的空白字符包括:Hi,后1个空格、we后1个空格、are后1个空格、here.后2个换行、huio后1个空格、klhi后2个换行,总共8个空白字符,所以你的代码输出8,但实际有效单词是Hi,、we、are、here.、huio、klhi,共6个。

修正思路

核心是跟踪是否处于单词中的状态:

  • 初始状态设为“不在单词中”
  • 遍历每个字符时:
    • 如果是空白字符,切换状态为“不在单词中”
    • 如果是非空白字符,且之前不在单词中,说明新单词开始,单词数加1,同时切换状态为“在单词中”

修正后的代码

int ch;
int in_word = 0; // 0=不在单词中,1=在单词中
int no_of_words = 0;

while ((ch = fgetc(fptr)) != EOF)
{
    if (ch == ' ' || ch == '\n' || ch == '\t' || ch == '\0')
    {
        in_word = 0;
    }
    else
    {
        if (!in_word)
        {
            no_of_words++;
            in_word = 1;
        }
    }
}

这段代码只会在新单词开始时计数,连续空白不会重复累加,能正确得到你预期的6个单词结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:52:11