18861950621 发表于 2019-4-26 11:35:29

求大佬帮忙解析一下带你学C带你飞第19课的一个课后作业

下列代码是如何求出不同的字符个数以及最多的字符是哪个共有多少个的,请回答尽量详细一些,本人初学者。3Q!

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

#define NUM 128

int main()
{
      int ch, i, j = 0, max = 0;
      int input_num = 0;
      int ascii = {0};
      char count = "";

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

      while ((ch = getchar()) != '\n')
      {
                ascii++; // 字符对应的ASCII码加1
                input_num++;
      }

      for (i = 0; i < NUM; i++)
      {
                if (ascii)
                {
                        count = i;
                        if (ascii > ascii)
                        {
                              max = i;
                        }
                }
      }

      printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", input_num, strlen(count));
      printf("它们是:%s\n", count);
      printf("出现次数最多的字符是\'%c\',它总共出现了%d次。\n", max, ascii);

      return 0;
}

我叫MD 发表于 2019-4-26 14:29:28

本帖最后由 我叫MD 于 2019-4-26 14:30 编辑

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

#define NUM 128      //宏定义NUM为128

int main()
{
      int ch, i, j = 0, max = 0;
      int input_num = 0;
      int ascii = {0};
      char count = "";

      printf("请输入英文文本:");
      
                /*这里首先了解getchar的作用(getchar 函数从标准输入流(stdin)中获取下一个字符。), 如果函数调用成功,返回获取的字符(用整型表示其 ASCII 码)。
                前面 int ascii = {0};的定义意思为变量ascii能储存128个元素,每个元素初始化为0;
                */
      while ((ch = getchar()) != '\n')   
      {
              /*字符对应的ASCII码加1(注:这里小甲鱼说的不准确,应该是:字符对应的ASCII码下标所对应的元素值加1),
                        比如 'a' 的 ASCII码为97,也就是ascii = 1; 因为之前初始化都为0了
              */
                ascii++;
                input_num++;   //这个很明显,就是用来统计输入了多少个字符的,每获取一个字符,这里就自增1,直到获取到换行符'\n'结束
      }

      for (i = 0; i < NUM; i++)
      {
                      /*这里循环 i ,当 ascii 为真的时候进入if函数体,开始都初始化为 0(为假),但是上面 while循环中,给ascii[]对应的位置自增过后
                                就变为真了
                                */
                if (ascii)
                {
                                /*这里count用来存储获取的字符的ASCII码,因为 j=0;且j++是后置自增;所以count相当于count; j=j+1;此时j=1;
                                                接下来就是获取字符了,刚才比如 'a' = 97;count = i; 就是count = 97; j = j+1;
                                */
                        count = i;
                        
                        /*还是'a' = 97;而max = 0; 带入 ascii > ascii,之前在while循环中知道 ascii = 1; 而ascii = 0;
                                                max = i; 就是 max = 97;      
                        */
                        if (ascii > ascii)
                        {
                              max = i;
                        }
                }
      }

      printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", input_num, strlen(count));
      printf("它们是:%s\n", count);
      printf("出现次数最多的字符是\'%c\',它总共出现了%d次。\n", max, ascii);

      return 0;
}

我按照自己的意思写了出来,多理解一下,带入几个字母算一下么就明白了
忘采纳
这样的注释应该不好看,你把代码和我写的注释复制到编译器里面就能分清楚注释和代码了

18861950621 发表于 2019-4-26 15:26:17

我叫MD 发表于 2019-4-26 14:29
#include
#include



谢谢大佬,非常的棒!

六一九 发表于 2019-4-26 19:07:39

我叫MD 发表于 2019-4-26 14:29
#include
#include



你好,我最近也在钻研这一题
关于ascii++,应该是计算128个字母每个字母输入的个数吧。
不知道你所解释的和我所理解的是同一个意思吗?

我叫MD 发表于 2019-4-27 11:27:14

六一九 发表于 2019-4-26 19:07
你好,我最近也在钻研这一题
关于ascii++,应该是计算128个字母每个字母输入的个数吧。
不知道你所 ...

对的
页: [1]
查看完整版本: 求大佬帮忙解析一下带你学C带你飞第19课的一个课后作业