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