|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下列代码是如何求出不同的字符个数以及最多的字符是哪个共有多少个的,请回答尽量详细一些,本人初学者。3Q!
#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;
}
本帖最后由 我叫MD 于 2019-4-26 14:30 编辑
#include <stdio.h>
#include <string.h>
#define NUM 128 //宏定义NUM为128
int main()
{
int ch, i, j = 0, max = 0;
int input_num = 0;
int ascii[NUM] = {0};
char count[NUM] = "";
printf("请输入英文文本:");
/*这里首先了解getchar的作用(getchar 函数从标准输入流(stdin)中获取下一个字符。), 如果函数调用成功,返回获取的字符(用整型表示其 ASCII 码)。
前面 int ascii[NUM] = {0};的定义意思为变量ascii能储存128个元素,每个元素初始化为0;
*/
while ((ch = getchar()) != '\n')
{
/*字符对应的ASCII码加1(注:这里小甲鱼说的不准确,应该是:字符对应的ASCII码下标所对应的元素值加1),
比如 'a' 的 ASCII码为97,也就是ascii[97] = 1; 因为之前初始化都为0了
*/
ascii[ch]++;
input_num++; //这个很明显,就是用来统计输入了多少个字符的,每获取一个字符,这里就自增1,直到获取到换行符'\n'结束
}
for (i = 0; i < NUM; i++)
{
/*这里循环 i ,当 ascii[i] 为真的时候进入if函数体,开始都初始化为 0(为假),但是上面 while循环中,给ascii[]对应的位置自增过后
就变为真了
*/
if (ascii[i])
{
/*这里count[j++]用来存储获取的字符的ASCII码,因为 j=0;且j++是后置自增;所以count[j++]相当于count[0]; j=j+1;此时j=1;
接下来就是获取字符了,刚才比如 'a' = 97; count[j++] = i; 就是count[0] = 97; j = j+1;
*/
count[j++] = i;
/*还是'a' = 97;而max = 0; 带入 ascii[97] > ascii[0], 之前在while循环中知道 ascii[97] = 1; 而ascii[0] = 0;
max = i; 就是 max = 97;
*/
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;
}
我按照自己的意思写了出来,多理解一下,带入几个字母算一下么就明白了
忘采纳
这样的注释应该不好看,你把代码和我写的注释复制到编译器里面就能分清楚注释和代码了
|
|