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;
} 去看了一下小甲鱼的答案代码,你这段代码有一个错误,我把答案代码重新贴出来
#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”
这一点我不知道小甲鱼前面的视频有没有说明,如果你能理解我就不说了,不能的话我再继续回复
SHRS23 发表于 2020-2-13 19:10
去看了一下小甲鱼的答案代码,你这段代码有一个错误,我把答案代码重新贴出来
谢谢大佬这么费心了{:10_266:},我先自己康康,看不懂了再问你 在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不完全相同");
}
} SHRS23 发表于 2020-2-13 19:10
去看了一下小甲鱼的答案代码,你这段代码有一个错误,我把答案代码重新贴出来
看懂了,例子也看了,谢谢老哥这么细心 2646810570@qq.c 发表于 2020-2-13 19:47
看懂了,例子也看了,谢谢老哥这么细心
不客气{:10_257:} SHRS23 发表于 2020-2-13 19:10
去看了一下小甲鱼的答案代码,你这段代码有一个错误,我把答案代码重新贴出来
int ascii = {0}; 用处是统计对应字符出现的次数,如ascii = 5 意思是ASCII码为97的字符(‘a’)输入了5次 请问这个次数是怎么记录的啊 假如我输入的是AAB这个程序怎么记录输入了两个A 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 SHRS23 发表于 2020-2-18 09:33
while ((ch = getchar()) != '\n')
{
ascii++; // 字符对应的ASCII码加1
...
SHRS23 发表于 2020-2-18 09:33
while ((ch = getchar()) != '\n')
{
ascii++; // 字符对应的ASCII码加1
...
谢谢,理解了
页:
[1]