[蓝蓝计算机考研算法训练二期]-day04

105 阅读1分钟

7、计算字符的个数

写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)

数据范围:1<=n<=1000

输入描述

第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。

输出描述

输出输入字符串中含有该字符的个数。(不区分大小写字母)

示例1

输入:

输入:
ABCabc
A

输出:

2

思路

先读入一个字符串和一个字符,然后使用tolower函数将字符转换为小写,接着遍历字符串中的每个字符,如果当前字符转换为小写后与输入的字符相同,则计数器加1。最后输出计数器的值即可。

具体实现

#include<stdio.h>
#include<ctype.h>  // 包含tolower函数的头文件

int main() {
    char str[1001], c;
    int i, cnt = 0;

    // 读入字符串和字符
    scanf("%s %c", str, &c);

    // 将字符转换为小写
    c = tolower(c);

    // 统计字符出现次数
    for (i = 0; str[i] != '\0'; i++) {
        if (tolower(str[i]) == c) {
            cnt++;
        }
    }

    // 输出结果
    printf("%d\n", cnt);

    return 0;
}

image.png

小结

今天代码的思路还是比较直接的,唯一可能出问题的地方就是输入字符串那里,如果将他当成两个 scanf 进行输入的话,可能会得不到第二次输入的结果,搜了好久,发现这是因为如果代码中有多个 scanf 函数读取输入,且其中有一个读取字符串,而后面的 scanf 函数读取的是单个字符,那么输入缓冲区中可能会残留一个换行符。这是因为 scanf 函数在读取字符串时不会读取换行符,但是在读取单个字符时会读取换行符。可是我忘记的是,scanf 本身就可以进行多个变量的输入。