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