c语言课后作业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;
}
那个对应字符码加一是对输入的字符的ascii序号加一还是数组加一用来存储输入的字符; 数组里面存储的数值加1 加了一下注释
#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')//这里面的ch是一个字符一个字符读取的,如果遇到回车键,就停止循环,也就是按下ENTER,就停止输入了
{
ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是对应的字符的数目加1
input_num++;//字符的数目加1
}
for (i = 0; i < NUM; i++)
{
if (ascii)//如果说某一个字符出现了,就进入if循环
{
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;
} 本帖最后由 大学里的小菜鸡 于 2020-8-17 10:56 编辑
小甲鱼的铁粉 发表于 2020-8-17 10:46
加了一下注释
ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是对应的字符的数目加1 请问这是用来对输入的字符进行存储的吗,加入输入四个a那么ascii是4还是存储的四个a 大学里的小菜鸡 发表于 2020-8-17 10:51
ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是对应的字符的数目加1 ...
不是的,就是为了统计出现的字符的数目
比如说A的ASCII是65,那么每输入一个A,ascii就会加一,ascii的值就是A出现的次数
这样统计是为了后面方便找到出现次数最多的字符
比如说找出现次数最多的字符的时候,只需要找到数组ascii中的最大值,最大值对应的下标就是出现次数最多的字符 本帖最后由 大学里的小菜鸡 于 2020-8-17 11:05 编辑
小甲鱼的铁粉 发表于 2020-8-17 10:55
不是的,就是为了统计出现的字符的数目
比如说A的ASCII是65,那么每输入一个A,ascii就会加一,as ...
感谢,前面的那里懂了,后面的这个 if (ascii)//如果说某一个字符出现了,就进入if循环 的意思是什么呢,
是不是加入输入qwerq,w、e和r都是输入了一个,那么判断为1,还是说A的ascii是65,判断ascii的时候检测到了有A,然后就判断为1 大学里的小菜鸡 发表于 2020-8-17 11:01
感谢,前面的那里懂了,后面的这个 if (ascii)//如果说某一个字符出现了,就进入if循环 的意思是什么 ...
没有输入的字符的位置就为0,有输入的字符对应的if判断就为真 大学里的小菜鸡 发表于 2020-8-17 11:01
感谢,前面的那里懂了,后面的这个 if (ascii)//如果说某一个字符出现了,就进入if循环 的意思是什 ...
意思就是只要ascii不是0,也就是之前输入过ASCII码为i的字符,这个字符是存在的,就进入了人if循环 本帖最后由 大学里的小菜鸡 于 2020-8-17 11:11 编辑
baige 发表于 2020-8-17 11:03
没有输入的字符的位置就为0,有输入的字符对应的if判断就为真
请问如果输入的是ABC,那么0到65之前的都判断为假吗,那个判断里面的i是ascii码吗
小甲鱼的铁粉 发表于 2020-8-17 11:07
意思就是只要ascii不是0,也就是之前输入过ASCII码为i的字符,这个字符是存在的,就进入了人if循环
意思是i是ascii码,假如之前输入了A,当i=65的时候就判断为真,进入循环了吗 大学里的小菜鸡 发表于 2020-8-17 11:12
意思是i是ascii码,假如之前输入了A,当i=65的时候就判断为真,进入循环了吗
不是的{:10_250:},i是数组ascii的下标,比如说我输入ABBDE,然后进入循环,那么ascii = 1, ascii = 2
ascii = 0, 因为没有输入C,所以它是0 , ascii = 1, ascii = 1, 那么在这里,当i = 65、66、68、69是数组ascii的值都不是0,就可以进入if (ascii)语句,而i = 67时,ascii = 0,不可以进入 小甲鱼的铁粉 发表于 2020-8-17 11:18
不是的,i是数组ascii的下标,比如说我输入ABBDE,然后进入循环,那么ascii = 1, ascii
感谢,最后一个问题,请问 ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是对应的字符的数目加1 这个读取的是输入字符的ascii码吗 大学里的小菜鸡 发表于 2020-8-17 11:27
感谢,最后一个问题,请问 ascii++; // 每个字符都有它自己的ASCII,字符对应的ASCII码加1,也就是 ...
ascii++,ch在这里面其实是一个数字,因为ASCII码是数字
比如说A吧,A的ASCII码是65,那么你每输入一个A,ascii就会加一
每输入一个B,ascii就会加一
这是ASCII码表,在评论区最下面 表 小甲鱼的铁粉 发表于 2020-8-17 11:34
表
好的,谢谢,终于理解了 {:10_257:}感谢楼主和解答的大佬,来蹭了个答案{:10_256:} 本帖最后由 毛驴子哈 于 2020-8-20 11:05 编辑
小甲鱼的铁粉 发表于 2020-8-17 10:46
加了一下注释
for循环是用户输入完毕才开始的嘛?
例如输入AABBCCC
ascii=2,ascii=2,ascii=3;
for(i=0,;i<NUM;i++)开始循环
当i=65时,对应的ascii=2,进入if循环
count=65,count=66 , count = 67(这里后面打印为它们的ascii对应的值)
然后下层if循环判断ascii > ascii 也就是2>0,这里ascii=0,
然后max被i(0被2)替换,下次与ascii 也就是ascii作比较
以此类推,最后输入次数最多的就是max
最后打印为max的ascii对应的值(66 / C),次数是ascii的值(3)。
这道题是这样的逻辑嘛{:10_298:}
毛驴子哈 发表于 2020-8-20 11:03
for循环是用户输入完毕才开始的嘛?
例如输入AABBCCC
ascii=2,ascii=2,ascii=3;
ascii并不一定等于0,如果你输入了空格,那么就不为0,这个是用来比较出最大数 大学里的小菜鸡 发表于 2020-8-20 11:09
ascii并不一定等于0,如果你输入了空格,那么就不为0,这个是用来比较出最大数
那max其实初始化为多少都可以喽,只要不超过ascii码值
毛驴子哈 发表于 2020-8-20 15:55
那max其实初始化为多少都可以喽,只要不超过ascii码值
页:
[1]
2