题目描述
输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出。
本题含有多组样例输入
输入描述:
一个只包含小写英文字母和数字的字符串。
输出描述:
一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。
示例1
输入
复制
aaddccdc
1b1bbbbbbbbb
输出
复制
cda
b1
说明
第一个样例里,c和d出现3次,a出现2次,但c的ASCII码比d小,所以先输出c,再输出d,最后输出a.
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//return max value
bool cmp(const pair<char, int> &p1, const pair<char, int> &p2)
{
return p1.second > p2.second;
}
int main()
{
string s;
while(getline(cin, s))
{
char a[128] = {0};
for(int i = 0; i < s.size(); i++)
{
if((s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z'))
a[s[i]] +=1;
}
vector<pair<char, int>> myvector;
for(int i = 0; i < 128; i++)
{
if(a[i] != 0)
myvector.push_back(make_pair((char)i, a[i]));
}
stable_sort(myvector.begin(), myvector.end(), cmp);
vector<pair<char, int>>::iterator it;
for(it = myvector.begin(); it != myvector.end(); it++)
cout<<it->first;
cout<<endl;
}
}