📜  C测验– 105 |问题5(1)

📅  最后修改于: 2023-12-03 15:00:12.549000             🧑  作者: Mango

题目介绍:C测验-105 | 问题5

本题是C测验第105题的第5个问题,题目较为简单,要求熟练掌握C语言中字符类型和数组的相关知识。

题目描述

请编写一个程序,接收用户输入的一行字符,统计其中每个字符出现的次数并输出。

程序设计

本程序设计的一般流程如下:

  1. 定义一个字符数组 str,用于存储用户输入的字符串。
  2. 定义一个整型数组 count,用于记录每个字符出现的次数。
  3. 使用 fgets() 函数从标准输入中读取用户输入的一行字符串,存入字符数组 str 中。
  4. 使用 strlen() 函数计算字符数组 str 的长度,并将其存入变量 len 中。
  5. 循环遍历字符数组 str 中的每个字符,并将其对应的 count 数组计数器加一。
  6. 输出每个字符出现的次数。
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 1000     // 定义最大输入长度

int main()
{
    char str[MAX_LENGTH];
    int count[128] = {0};   // 用于记录每个字符出现的次数,共有128个ASCII字符

    printf("请输入字符串:\n");
    fgets(str, MAX_LENGTH, stdin);

    int len = strlen(str);
    for (int i = 0; i < len; i++)
        count[str[i]]++;

    printf("每个字符出现的次数为:\n");
    for (int i = 0; i < 128; i++)
    {
        if (count[i] != 0)
            printf("%c : %d\n", (char)i, count[i]);    // 类型强制转换
    }

    return 0;
}
注意事项
  1. 字符数组 str 的长度应该大于用户输入的字符串长度,否则可能会出现缓冲区溢出的问题。
  2. 在使用 fgets() 函数读取用户输入的字符串时,应该指定最大输入长度。
  3. 在循环遍历字符数组 str 时,应该将每个字符转化为其对应的ASCII码,以便于将其作为 count 数组的下标并进行计数。
  4. 在输出计数结果时,需要将ASCII码转化为相应的字符类型并输出,应该使用类型强制转换。
结语

本题目通过对字符数组和数组的操作来巩固学习者对C语言的基本语法的理解。同时,也增强了学习者的C语言调试能力和问题解决能力。