题目描述
编写程序,输入一个字符串(串长不超过1024),
程序统计字符串中的各小写字母出现的次数,
然后按字母出现的多少顺序输出
(先输出字母出现次数多的,如果出现次数相同,
则按字母表顺序输出,对不出现的字母不输出)。
测试情况
例如,输入:hdhdhabe
输出:
h 3
d 2
a 1
b 1
e 1
代码内容
#include <stdio.h>
#include<string.h>
int main()
{
char a[26],b[26]={0},c[1025];
gets(c);
int n=strlen(c),t,i,j;
for(i=0;i<26;i++)//a为26个字母数组
{
a[i]='a'+i;
}
for(i=0;i<n;i++)
{
if(c[i]>='a'&&c[i]<='z')//b为各字母对应的个数
{
t=c[i]-'a';
b[t]++;
}
}
int x=0,d[26],e[26];
for(i=0;i<26;i++)
{
if(b[i]!=0)//统计不为0的字母个数
{
x++;
d[x]=b[i]; //定义新数组盛放个数
e[x]=a[i]; //定义新数组盛放所对应的字母
}
}
for(i=0;i<x;i++)//冒泡排序,将两个数组同时交换,即字母与其个数对应一致
{
for(j=0;j<x-i;j++)
{
int t,y;
if(d[j]<d[j+1])
{
t=d[j],d[j]=d[j+1],d[j+1]=t;
y=e[j],e[j]=e[j+1],e[j+1]=y;
}
}
}
for(i=0;i<x;i++)//输出字母与其个数,由高到低个数递减
printf("%c %d\n",e[i],d[i]);
return 0;
}