c++字符数组

题目描述

题目描述

输入一个英文句子(长度不会超过100),和他的长度,统计每个字母出现的个数。

输入

第一行包括一个整数,表示句子的长度,长度不会超过100。数字后可能会有多余的无效字符 请gets掉。

第二行包括一个英文句子。

输出

按顺序输出每个出现的小写字母的个数。

样例输入

25
pascal is so interesting!

样例输出

a 2
c 1
e 2
g 1
i 3
l 1
n 2
o 1
p 1
r 1
s 4
t 2

程序

#include <bits/stdc++.h>
using namespace std;
char a[1000];
char tmp[10];
int ans[10000];
int main()
{
        int n;
        cin >> n;
        gets(tmp);//去掉无效的字符 
        gets(a);
        memset(ans,0,sizeof(ans));//把整个ans数组归零 
        for (int i = 0;i <= n - 1;i ++) 
        {
                if ((a[i] <= 'z') && (a[i] >= 'a'))
                {
                        ans[a[i] - 'a' + 1] ++;//a[i] - 'a' + 1 是把字母转换成字母对应的位置
                        /*ans[a[i] - 'a' + 1] ++;是把ans数组里字母对应的位置加1,进行统计*/
                }
        }
        for (int i = 1;i <= 26;i ++)
        {
                if (ans[i] != 0)//过滤掉字母个数为零的情况 
                {
                        printf("%c %d \n",i + 'a' - 1,ans[i]);//i + 'a' - 1是把字母对应的位置转换成字母的ascll码 
                } 
        }
        return 0;
}