字母排序

Hack It

题目描述
已知一段明文是用替换加密生成的,对付这种加密的最有效的方法是统计出文章的26个字母的频率,进而确定字母频率顺序。你的任务就是写一个程序计算每一个密文中26个字母按降序。
输入
一段字符串(大小写字母组成)不含有空格,(多组输入)
输出
对于每一行按频率降序输出出现的字母,相同频率(不区分大小写aA表示a出现了2次)的按照字母表顺序输出。
样例输入

abcdefgh
aaabbcccc
abcdefghijklmnABCDZZZ

样例输出

abcdefgh
cab
zabcdefghijklmn
//有个时候没写出来的题目就在那么一瞬间就会了,刚学c++的时候写的代码
#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值