#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直接储存参与链接