2646810570@qq.c 发表于 2020-2-13 18:25:53

S1E19课最后一题

有没有大佬能不能帮我解释一下19课最后一题。。看不太懂。。


#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;
}

SHRS23 发表于 2020-2-13 19:10:59

去看了一下小甲鱼的答案代码,你这段代码有一个错误,我把答案代码重新贴出来
#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;
}

首先我解释各个变量的含义和用途:
int ch, i, j = 0, max = 0;ch:输入字符的临时存储;i,j循环变量;max:存储出现次数最多的字母
int input_num = 0; 用处是统计输入字符个数
int ascii = {0}; 用处是统计对应字符出现的次数,如ascii = 5 意思是ASCII码为97的字符(‘a’)输入了5次
char count = "";用处是存储所出现的所有字符

接下来是这段:
while ((ch = getchar()) != '\n')
{
       ascii++; // 字符对应的ASCII码加1
       input_num++;
}
每次读取一个字符直到读取到了换行符结束循环
循环的内容是将读到字符对应的ascii数组的值自增1
输入字符总数自增1

下面这段:
      for (i = 0; i < NUM; i++)
      {
                if (ascii)
                {
                        count = i;
                        if (ascii > ascii)
                        {
                              max = i;
                        }
                }
      }
对于ascii的每一位进行遍历(因为ascii数组定义时的长度就是NUM)
如果ascii 不等于 0 (ascii=0意味着以i为ASCII码的字符没有输入)
那么说明出现了一个新的字符,将这个字符i存入count数组,然后把count数组的索引变量j自增1
如果字符i的个数大于数量最多的字符max的个数,那么用字符i代替max
说明此时字符个数最大的字母已经更新为i

最后的输出部分不再多说。
这个程序对新手的难点在于对ascii[]数组作用的理解
还有对C语言中的字符类型‘char’的理解
我在上面解释中使用了“字符i”、“字符max”
这一点我不知道小甲鱼前面的视频有没有说明,如果你能理解我就不说了,不能的话我再继续回复

2646810570@qq.c 发表于 2020-2-13 19:22:34

SHRS23 发表于 2020-2-13 19:10
去看了一下小甲鱼的答案代码,你这段代码有一个错误,我把答案代码重新贴出来




谢谢大佬这么费心了{:10_266:},我先自己康康,看不懂了再问你

SHRS23 发表于 2020-2-13 19:28:46

在C语言里 char 型存储的内容就是字符对应的ASCII码,你可以结合这个例子理解一下。
#include <stdio.h>

int main()
{
      inti;
                char ch;
               
      ch = 'a';
      printf("%c %d\n\n", ch, ch);
      printf("%c %d\n\n", 100, 100);
      
      for(i = 97;i <= 'z';i++)
      {
                       printf("%d%c\n", i, i);
                }
               
                if('a' == 97)
                {
                        printf("字符a与97完全相同");
                }
                else
                {
                        printf("字符a与97不完全相同");
                }      
}

2646810570@qq.c 发表于 2020-2-13 19:47:29

SHRS23 发表于 2020-2-13 19:10
去看了一下小甲鱼的答案代码,你这段代码有一个错误,我把答案代码重新贴出来




看懂了,例子也看了,谢谢老哥这么细心

SHRS23 发表于 2020-2-13 20:10:15

2646810570@qq.c 发表于 2020-2-13 19:47
看懂了,例子也看了,谢谢老哥这么细心

不客气{:10_257:}

rocketeer 发表于 2020-2-17 11:53:44

SHRS23 发表于 2020-2-13 19:10
去看了一下小甲鱼的答案代码,你这段代码有一个错误,我把答案代码重新贴出来




int ascii = {0}; 用处是统计对应字符出现的次数,如ascii = 5 意思是ASCII码为97的字符(‘a’)输入了5次   请问这个次数是怎么记录的啊 假如我输入的是AAB这个程序怎么记录输入了两个A

SHRS23 发表于 2020-2-18 09:33:15

rocketeer 发表于 2020-2-17 11:53
int ascii = {0}; 用处是统计对应字符出现的次数,如ascii = 5 意思是ASCII码为97的字符(‘a’ ...

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

这段程序
假设输入AABA
第一次循环 ascii['A'] = 1
第二次循环 ascii['A'] = 2
第三次循环 ascii['B'] = 1
第四次循环 ascii['A'] = 3

rocketeer 发表于 2020-2-18 19:54:15

SHRS23 发表于 2020-2-18 09:33
while ((ch = getchar()) != '\n')
      {
                ascii++; // 字符对应的ASCII码加1
...

rocketeer 发表于 2020-2-18 19:57:26

SHRS23 发表于 2020-2-18 09:33
while ((ch = getchar()) != '\n')
      {
                ascii++; // 字符对应的ASCII码加1
...

谢谢,理解了
页: [1]
查看完整版本: S1E19课最后一题