有大佬能解释一下小甲鱼的课后作业吗
本帖最后由 1613551 于 2022-11-4 16:37 编辑主要有以下3个不懂
1.第1行的count="";是什么意思?是初始化吗?好像没见过这种用法
2.第17行的ascii++是什么意思?getchar函数把值给了ch,可是ch的值是一个字符,数组的下标索引可以是一个字符吗?
3.第25行的count=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 = {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);
system("pause");
return 0; 本帖最后由 jackz007 于 2022-11-4 18:39 编辑
这题的依据是,ASCII 字符一共 128 个,字符编码为 0~127,任何从键盘输入的字母、数字、特殊符号等其 ASCII 编码都无法脱离这个范围,于是,可以设计一个有 128 个元素的一维整型数组 int ascii,先把所有元素初始化为 0 值,然后,开始循环从键盘读取字符 ch,只要这个字符不是换行符 '\n',那就以 ch 的值作为索引,将 ch 对应元素 ascii 的值加 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 = {0}; // 定义 ascii[] 为 128 个元素的一维整型数组,并初始化每一个元素的值为 0 值
char count = ""; // 定义 count 为拥有 128 个字符的字符串空间,并初始化 count = '\0'
printf("请输入英文文本:");
while ((ch = getchar()) != '\n') // 循环从键盘读入一个字符存入 ch,如果 ch 不是 '\n' 就进入循环
{
ascii++; // ch ASCII 码对应的 ascii 数组元素 ascii 的值增加 1
input_num++; // 输入字符数增加 1
}
for (i = 0; i < NUM; i++) // 循环扫描一维整型数组 ascii 128 个元素
{
if (ascii) // 如果字符 i 有计数值
{
count = i; // 把字符 i 写入字符集 count,同时,字符集 count 不同字符计数值 j (初始值为 0)增加 1
if (ascii > ascii) // 如果字符 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);
system("pause");
return 0;
} 这是题目 {:10_245:} 在C里,字符是可以当作数字使用的,会把字符转化为ASCII码
ASCII码对照表 -> http://c.biancheng.net/c/ascii/
char count = ""; 就是把 count 初始为空字符串 “”='\0' 本帖最后由 1613551 于 2022-11-4 17:27 编辑
tommyyu 发表于 2022-11-4 16:47
在C里,字符是可以当作数字使用的,会把字符转化为ASCII码
ASCII码对照表 -> http://c.biancheng.net/c/as ...
那这样的话,假设我输入的是ABCDE,那相对应的就是ascii++=ascii一直到ascii++=ascii吗?
那不是无法进入第23行的if判断吗?它是从ascii到ascii这里面的数值都是空的吧
{:10_302:}我知道可以转换,但是好像转换后逻辑也不通的样子 1613551 发表于 2022-11-4 17:26
那这样的话,假设我输入的是ABCDE,那相对应的就是ascii++=ascii一直到ascii++=ascii ...
当 i 是65、66、67、68、69的时候,就可以进入 if 判断了啊 本帖最后由 tommyyu 于 2022-11-4 17:42 编辑
1613551 发表于 2022-11-4 17:26
那这样的话,假设我输入的是ABCDE,那相对应的就是ascii++=ascii一直到ascii++=ascii ...
那一句 if(ascii)就是为了在 ascii 不是 0 的时候进入判断
(我上面的字怎么自动变成斜体了{:10_277:} ) jackz007 发表于 2022-11-4 16:37
这题的依据是,ASCII 字符一共 128 个,字符编码为 0~127,任何从键盘输入的字母、数字、特殊符号等 ...
{:10_275:}好牛,我一眼就看懂了 1613551 发表于 2022-11-4 18:57
好牛,我一眼就看懂了
很高兴,说明没有白忙活!
页:
[1]