鱼C论坛

 找回密码
 立即注册
查看: 2370|回复: 3

[已解决]统计字符串有几个单词的程序

[复制链接]
发表于 2018-9-26 05:18:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小腿跑乱刀 于 2018-9-26 13:39 编辑

主要原因在于for循环中的if语句,
你的代码是每当遇到一个空格就会进行一次比较,
但是,当输入一系列单词后,最后的一个单词往往是不添加空格而是直接回车的,
这意味着你输入的最后一个单词实际上根本没有进行比较,也就没有纳入统计的结果之中。

当然除了这一个问题还有其他的一些问题需要你自己再思考着改改,比如你的变量r统计的是单词的个数吧,在还没有统计的时候单词个数应该为0,而你将其初始化为了1。
但恰巧就像我前面说的你的程序忽略了输入的最后一个单词,这反而造成了单词个数的统计结果是正确的(但实际上做法是错误的)。

我去上课前大概写了下,参考一下吧,可能也有错
  1. #include <stdio.h>

  2. #define IN 1
  3. #define OUT 0

  4. int main(int argc, char **argv)
  5. {
  6.     int num_word = 0, maxlen = 0, count = 0;
  7.     int state = OUT;
  8.     char c;
  9.    
  10.     int flag;
  11.   
  12.     while((c = getchar()) != '\n')
  13.     {
  14.         flag = (c == ' ' | c == '\t');
  15.         if(!flag & state == OUT)
  16.         {
  17.             state = IN;
  18.             num_word++;
  19.             count++;
  20.         }
  21.         else if(!flag & state == IN)
  22.         {
  23.             count++;
  24.         }
  25.         else if(flag & state == IN)
  26.         {
  27.             if(count > maxlen) maxlen = count;
  28.             state = OUT;
  29.             count = 0;
  30.         }
  31.     }
  32.     if(count > maxlen) maxlen = count;
  33.     printf("num_word:%d  maxlen:%d\n", num_word, maxlen);
  34.     return 0;
  35. }
复制代码


另外你是统计一句话的单词数,所以我给while的判断条件是不等于'\n',如果要统计一段话的单词书只需要不等于EOF或者不等于一个负整数就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-25 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表