|
60鱼币
本帖最后由 1613551 于 2022-11-4 16:37 编辑
主要有以下3个不懂
1.第1行的 count[num]="";是什么意思?是初始化吗?好像没见过这种用法
2.第17行的 ascii[ch]++是什么意思?getchar函数把值给了ch,可是ch的值是一个字符,数组的下标索引可以是一个字符吗?
3.第25行的 count[j++]=i; 问题和上面同样的,count是一个字符数组吧?为什么是把整形赋值过来了?
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.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]);
- system("pause");
- return 0;
复制代码
本帖最后由 jackz007 于 2022-11-4 18:39 编辑
这题的依据是,ASCII 字符一共 128 个,字符编码为 0~127,任何从键盘输入的字母、数字、特殊符号等其 ASCII 编码都无法脱离这个范围,于是,可以设计一个有 128 个元素的一维整型数组 int ascii[NUM],先把所有元素初始化为 0 值,然后,开始循环从键盘读取字符 ch,只要这个字符不是换行符 '\n',那就以 ch 的值作为索引,将 ch 对应元素 ascii[ch] 的值加 1。这样,等到键盘输入完成的时候,只要扫描数组 ascii 128 个元素的值,就可以知道每个字符的输入计数。
例如,如果 ascii['A'] = 5,ascii['a'] = 2 那就说明你曾经输入了 5个 'A' 和 2 个 'a'。
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define NUM 128
- int main()
- {
- int ch, i, j = 0, max = 0;
- int input_num = 0;
- int ascii[NUM] = {0}; // 定义 ascii[] 为 128 个元素的一维整型数组,并初始化每一个元素的值为 0 值
- char count[NUM] = ""; // 定义 count 为拥有 128 个字符的字符串空间,并初始化 count[0] = '\0'
- printf("请输入英文文本:");
- while ((ch = getchar()) != '\n') // 循环从键盘读入一个字符存入 ch,如果 ch 不是 '\n' 就进入循环
- {
- ascii[ch]++; // ch ASCII 码对应的 ascii 数组元素 ascii[ch] 的值增加 1
- input_num++; // 输入字符数增加 1
- }
- for (i = 0; i < NUM; i++) // 循环扫描一维整型数组 ascii 128 个元素
- {
- if (ascii[i]) // 如果字符 i 有计数值
- {
- count[j++] = i; // 把字符 i 写入字符集 count,同时,字符集 count 不同字符计数值 j (初始值为 0)增加 1
- if (ascii[i] > ascii[max]) // 如果字符 i 的统计值大于字符 max(max 初始值为 0),那么,max 就更新为字符 i
- {
- max = i;
- }
- }
- } // 循环结束后,max 是出现次数最多的那个字符,count 中记录了所有出现过的字符,j 为字符集中的不同字符的数量
- printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", input_num, strlen(count));
- printf("它们是:%s\n", count);
- printf("出现次数最多的字符是\'%c\',它总共出现了%d次。\n", max, ascii[max]);
- system("pause");
- return 0;
- }
复制代码
|
最佳答案
查看完整内容
这题的依据是,ASCII 字符一共 128 个,字符编码为 0~127,任何从键盘输入的字母、数字、特殊符号等其 ASCII 编码都无法脱离这个范围,于是,可以设计一个有 128 个元素的一维整型数组 int ascii[NUM],先把所有元素初始化为 0 值,然后,开始循环从键盘读取字符 ch,只要这个字符不是换行符 '\n',那就以 ch 的值作为索引,将 ch 对应元素 ascii[ch] 的值加 1。这样,等到键盘输入完成的时候,只要扫描数组 ascii 128 个元 ...
|