Bob是一个强迫症,任何他所看到的字符串,他都要统计各个字符的出现评率,并按照评率排序字符串,出现次数越多应该被越排在前面,对于出现次数相同的两个字符,谁最先出现在s中,谁就排在前面,现在给你一个字符串s,请你输出排序后的字符串s1用简单c++编写,不用,结构体函数编写
时间: 2024-05-09 15:15:48 浏览: 6
可以使用 STL 中的 map 容器来统计各个字符的出现评率,并使用 vector 容器存储字符及其出现次数,最后通过自定义排序函数对 vector 进行排序。代码如下:
```c++
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(pair<char, int> a, pair<char, int> b) {
if (a.second != b.second) {
return a.second > b.second;
}
return a.first < b.first;
}
int main() {
string s;
cin >> s;
map<char, int> mp;
for (char c : s) {
mp[c]++;
}
vector<pair<char, int>> vec;
for (auto it : mp) {
vec.push_back(it);
}
sort(vec.begin(), vec.end(), cmp);
for (auto p : vec) {
cout << p.first;
}
cout << endl;
return 0;
}
```
其中,cmp 函数用于自定义排序规则,首先按照出现次数降序排列,如果出现次数相同,则按照字符在字符串中出现的顺序升序排列。map 容器用于统计各个字符的出现次数,vec 容器用于存储字符及其出现次数,最后通过 sort 函数对 vec 进行排序。