|
发表于 2020-10-7 01:22:50
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 @小鱼仔 于 2020-10-7 01:28 编辑
#include <stdio.h>
#include <string.h>
#define NUM 128
int main()
{
int ch, i, j = 0, max = 0;
int input_num = 0;
int ascii[NUM] = {0};
char count[NUM] = "";
printf("请输入英文文本:");
while ((ch = getchar()) != '\n')
{
ascii[ch]++; // 字符对应的ASCII码加1
input_num++;
}
for (i = 0; i < NUM; i++)
{
if (ascii[i])
{
count[j++] = i;
if (ascii[i] > ascii[max])
{
max = i;
}
}
}
printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", input_num, strlen(count));
printf("它们是:%s\n", count);
printf("出现次数最多的字符是\'%c\',它总共出现了%d次。\n", max, ascii[max]);
return 0;
}
从for循环开始为什么第一个判断(ascii[i])i的值是for循环里更新计数器的值,而运行到(count[j++]=i)的时候i又变成ascii码值且赋给元素j。最不能让我理解的是strlen(count)计算字符个数的时候怎么能跳过重复出现的字符从而输出不同字符的个数。最后计算出现最多的字符和总共出现的次数就更加看不懂了求大神解!!
本帖最后由 风过无痕1989 于 2020-10-9 01:45 编辑
不是 strlen 跳过重复的字符,而是通过计算 count 的长度,得知有多少种字符。
第24行,有个条件判断语句,有不同的字符出现,才进入 if 循环,进入循环,count 才加1,于是也就多了一种字符
这种判断得益于 ascii 数组,于是每个字符都有它自己的ASCII,比如:字母 a 的 ASCII[a],字母 b 的 ASCII[ b ] ....... 第18行就是利用这种使得来对字符进行统计的,字符对应的ASCII码加1,也就是对应的字符的数目加1
|
|