#include <iostream>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <vector>
using namespace std;
bool compare(const std::pair<int,char> &a,const std::pair<int,char> &b)//重载排序
{
if(a.first==b.first) return a.second<b.second;//若出现次数相同,则按照ascii码从小到大排序
else return a.first>b.first;
}
int main()
{
string str;
cin>>str;
int a[40];
memset(a,0,sizeof a);
vector<pair<int,char>> h;
for(int i=0;i<str.length();i++)
{
if(isdigit(str[i])) a[str[i]-48]++;
else if(islower(str[i])) a[str[i]-87]++;
}
for(int i=0;i<10;i++)
{
if(a[i]>=0)
{
char c=char(i+48);
h.push_back({a[i],c});
}
}
for(int i=10;i<36;i++)
{
if(a[i]!=0)
{
char c=char(i+87);
h.push_back({a[i],c});
}
}
sort(h.begin(),h.end(),compare);
for(auto it :h)
{
if(it.first==0) break;
cout<<it.second;
}
return 0;
}
首先统计各个字符出现的次数,再存入vector中,进行重载排序,最后输出。也可用stl map直接储存参与链接

京公网安备 11010502036488号