1. 题目
输入一个字符串,统计在该字符串中每个字母出现的次数
例如:
输入:i am a student
输出:a:2 d:1 e:1 i:1 m:1 n:1 s:1 t:2 u:1
2. 大体思路
- 题目说输入一个字符串,还说要统计字符串中每个字母的次数,那么肯定要将输入的字符串存起来。
- 要统计每个字母出现的个数,那肯定要创建一个整形数组来存放出现次数。
- 想办法将字母与该字母出现的次数绑定在一块
- 输出
3. 解题过程
-
创建一个数字数组和一个字符数组
-
将输入的字符串放在字符数组中(我在这里使用了gets函数)
-
使用循环将字母与该字母出现的次数绑定在一块
#include<stdio.h>
int main()
{
char arr1[100] = { 0 };
int arr2[200] = { 0 };
gets(arr1);
int i = 0;
for (i = 0; arr1[i] != '\0'; i++)
{
arr2[arr1[i]]++;
}
return 0;
}
到这里肯定有人要问了:
临水你这循环里写的是什么玩意啊,我怎么有点迷迷糊糊的?
别急,让我给你慢慢道来
将arr1[i]放在arr2[]中,其实是将arr1[i]中的字符转换成对应的ASCII码值
如果arr1[i]中存放的是字符a,那么arr2[arr1[i]]等价于arr2[65]。最外面的++,表示在该位置上存的数加一
- 接下来就是输出了
#include<stdio.h>
int main()
{
char arr1[100] = { 0 };
int arr2[200] = { 0 };
gets(arr1);
int i = 0;
for (i = 0; arr1[i] != '\0'; i++)
{
arr2[arr1[i]]++;
}
for (i = 'a'; i<'z'; i++)//我在这里限定输出小写字母出现的次数
{
if (arr2[i] != 0)
printf("%c:%d ", i, arr2[i]);//在这里i是字母的ASCII值
}
return 0;
}
if语句用来判断ASCII码值为 i 的字符串中是否出现过
试运行: