问题描述 :
密码分析学中常常需要统计字符出现的频度。给定若干行短文,要求按字符出现的频度由高到低输出,当两个字符出现的频度相同时,按字符大小的顺序输出。
注意:只需要统计英文字母的频度,非英文字母一律忽略。
输入说明 :
输入由多组数据组成。每组数据由一行长度不超过100的字符串组成,不区分字母大小写,如A与a看作同一个字母。
输出说明 :
对每组输入数据都有若干行输出,每行有两个输出数据,第一个数据为某个大写字母,第二个数据为该字母出现的频度,两个数据之间有一个空格。输出顺序按字母出现的频度由高到低输出,当两个字母的频度相同时,按字母大小的顺序输出。两组输出之间有一行空行。
#include <stdio.h>
#include <string.h>
int main()
{
int num[26]={0};
char str[101];
int maxi=26,maxc=0;
while(gets(str))
{
for(int i=0;str[i]!='\0';i++)
{
if(str[i]>='a'&&str[i]<='z')
num[str[i]-'a']++;
else if(str[i]>='A'&&str[i]<='Z')
num[str[i]-'A']++;
}
for(int j=0;j<=25;j++) //完成交换
{
for(int k=0;k<=25;k++)
{
if(num[k]>maxc){
maxi=k;
maxc=num[k];
}
}
if(maxc!=0){
printf("%c %d\n",'A'+maxi,maxc);
num[maxi]=0;
maxc=0;
}
}
printf("\n");
maxi=26,maxc=0;
memset(num,0,sizeof(num));
}
return 0;
}