排序
由文本文件提供一个由英文句子组成的短文,短文的总长度不超过240,试编程统计文中各英文字母出现的频率,并按出现的频率, 从高到低重新排列26个英文字母,对出现相同频率的字母按字母表中的优先次序排列。不考虑英文字母的大小写,请全部转换成大写输出,对未出现的英文字母不输出。
输入文件:只有一行,就是一个英文短文,
输出文件:有若干行,每一行先输出字母,然后输出它的频率,中间用空格隔开。
输入输出样例:
输入:
Why not? Yes.
输出:
Y 2
E 1
H1
N1
O 1
S1
T1
W1
#include<iostream>
#include<cstring>
using namespace std;
struct stru
{
char c;
int n;
};
stru a[27];
char b[250];
int main()
{
int i,j, len;
gets(b);
len = strlen(b);
strupr(b);
for(i=1; i<=26; i++)
{
a[i].c='A'+i-1;
a[i].n = 0;
}
for(i=0; i<len; i++)
{
if(b[i]>='A' && b[i]<='Z')
a[b[i]-'A'+1].n += 1;
}
for(i=1;i<=26; i++)
{
for(j=1; j<=26-i; j++)
{
if(a[j].n<a[j+1].n)
{
a[0].c=a[j].c;
a[0].n=a[j].n;
a[j].c=a[j+1].c;
a[j].n=a[j+1].n;
a[j+1].c=a[0].c;
a[j+1].n=a[0].n;
}
}
}
for(i=1; i<=26&&a[i].n>0; i++)
{
cout<<a[i].c<<" "<<a[i].n<<endl;
}
return 0;
}