Hack It
题目描述
已知一段明文是用替换加密生成的,对付这种加密的最有效的方法是统计出文章的26个字母的频率,进而确定字母频率顺序。你的任务就是写一个程序计算每一个密文中26个字母按降序。
输入
一段字符串(大小写字母组成)不含有空格,(多组输入)
输出
对于每一行按频率降序输出出现的字母,相同频率(不区分大小写aA表示a出现了2次)的按照字母表顺序输出。
样例输入
abcdefgh
aaabbcccc
abcdefghijklmnABCDZZZ
样例输出
样例输出
abcdefgh
cab
zabcdefghijklmn
#include<bits/stdc++.h>
using namespace std;
struct zifu{
char zi;
int sum;
}s[26];
bool mycmp(zifu &m,zifu &n){
if(m.sum!=n.sum)return m.sum>n.sum;
else return m.zi<n.zi;
}
int main(){
int k=0;
for(int i='a';i<='z';i++)s[k++].zi=i;
char a[100];
while(cin>>a){
for(int i=0;i<26;i++)s[i].sum=0;
int n=strlen(a);
for(int i=0;i<n;i++){
if(isupper(a[i]))a[i]=tolower(a[i]);
}
for(int i=0;i<n;i++){
for(int j=0;j<26;j++){
if(a[i]==s[j].zi)s[j].sum++;
}
}
sort(s,s+26,mycmp);
for(int i=0;i<26;i++){
if(s[i].sum!=0)cout<<s[i].zi;
}
cout<<endl;
}
return 0;
}