coura 发表于 2021-10-9 20:08:27

19字符串处理函数课后作业动动手最后一题,有部分疑惑

本帖最后由 coura 于 2021-10-9 20:10 编辑

中间两个循环语句完全不明白为什么??
#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;
}

为什么while语句中字符对应的码值加1?
for语句中if(ascii)是什么意思,以及如何得到max?

coura 发表于 2021-10-9 20:22:04

前两个问题,我想明白了。
第一ascii[]是一个数组,并且开始令所有的数都为0。因为一个字符对应的码值是不同的,在那个字符对应的码值的地方0+1……,就可以出现差异。
第二if(ascii[])里面是数组里的数,只有加过一的地方才是真,然后执行if语句,每有一个i就是一个不同的字符,进行j++记录。
但是max那个地方还没有弄懂,求解惑祸……

coura 发表于 2021-10-9 20:30:01

max的地方我也明白了:
就是从max=0开始,一旦有ascii>ascii,就更新max的值,最后出来的就是最大的。
不好意思,脑筋有点转不过来。
来一个回复,我设为最佳答案,我不会删帖。

傻眼貓咪 发表于 2021-10-9 20:32:28

while 语句中字符对应的码值加 1,如:ascii++ 表示索引位置就是ASCII字符编号,默认为 0

比如:ascii,ASCII编号65是 'A',如果这里 ascii = 1,表示曾经访问过 'A',如果 ascii = 0,没有访问过这个位置,所以 'A' 不存在
(这就是为什么一开始就定义 ascii,因为字符刚好 128 个)

至於 max,初始值为 0,只要有大于 max 的值,就取代 max,最后 max 一定就是最大值。

coura 发表于 2021-10-9 21:00:08

傻眼貓咪 发表于 2021-10-9 20:32
while 语句中字符对应的码值加 1,如:ascii++ 表示索引位置就是ASCII字符编号,默认为 0

比如:asc ...

大神,我的大神,嘿嘿{:10_301:}
页: [1]
查看完整版本: 19字符串处理函数课后作业动动手最后一题,有部分疑惑