鱼C论坛

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

[技术交流] 课后作业S1E19最后一题,自己分析了一波,求指导

[复制链接]
发表于 2019-7-3 21:47:25 | 显示全部楼层 |阅读模式
20鱼币
题目要求写一个字符统计程序
要求 A:统计用户输入的所有字符个数;
要求 B:统计不同的字符个数,并打印出来;
要求 C:找出出现次数最多的字符。

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define NUM 128

  4. int main()
  5. {
  6.         int ch, i, j = 0, max = 0;
  7.         int input_num = 0;
  8.         int ascii[NUM] = { 0 };
  9.         char count[NUM] = "";

  10.         printf("请输入英文文本:");

  11.         while ((ch = getchar()) != '\n')
  12.         {
  13.                 ascii[ch]++; // ch为整型变量,getchar输入的是字母,所以此时下标为ascii码值
  14.                 input_num++;
  15.         }/*输入f,ascii[102]=ascii[102]+1,ascii[102]==1,input_num=1;
  16.          输入c,ascii[99]==1,input_num=2;
  17.          输入c,ascii[99]==2,input_num=3;
  18.          输入c,ascii[99]==3,input_num=4;
  19.          输入c,ascii[99]==4,input_num=5;*/

  20.         for (i = 0; i < NUM; i++)
  21.         {
  22.                 if (ascii[i])//由于ascii[]数组初始化为0,只有i为输入的ascii码值时,ascii[i]!=0,才能进入if语句
  23.                 {
  24.                         count[j++] = i;
  25.                         if (ascii[i] > ascii[max])
  26.                         {
  27.                                 max = i;
  28.                         }/*i为99时,ascii[99]==4,count[0]=1(count[]=={1}),j++,ascii[99] > ascii[0](即4>0),max=99;
  29.                  i为115时,ascii[115]==1,count[1]=1(count[]=={1,1}),j++,ascii[105] < ascii[99],max不变*/
  30.                 }
  31.         }

  32.         printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", input_num, strlen(count));
  33.         printf("它们是:%s\n", count);//这一句没有懂,count应该是一个{1,1,....}的数组吧,怎么变成字符数组的呢?
  34.         printf("出现次数最多的字符是\'%c\',它总共出现了%d次。\n", max, ascii[max]);

  35.         return 0;
  36. }
复制代码


这道题真可谓是初见杀,真实感受到了智商的差距;
每一个函数我都认识,组合到一起就蒙圈了,小萌新瑟瑟发抖 ;
也搜了论坛里的讲解,但是有点笼统,我实在 是看不懂,于是自己硬着头皮捋了一晚上,总算有点思路了;
但是倒数第二个printf还是不太明白,各位大神救救孩子吧

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-3 23:36:18 | 显示全部楼层
倒数第二个printf输出的时候使用的是  %s 使得结果输出为字符串了   %s是输出字符串用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-4 08:06:06 | 显示全部楼层
果然做题不能死扣啊,一觉起来再看,自己就能发现问题了.自我更正下:
第17行的注释表达有误,正确表述是getchar读取下一个字符,返回类型为int型,为用户输入的ASCII码或EOF.
第29行完全是看错,把i看成1了,原式count[j++] = i;所以count是一个{99,102}的数组才对,打印出来就是c和f了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-5 17:21:17 | 显示全部楼层
ascii[ch]++;      这里是  ascii[ch]=0+1;     把 ch 做下标  里面的值 0+1    再次循环到一样字符  值再+1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 22:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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