题解 | #字符统计#
字符统计
https://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef pair<char,int> T;//第一个为字符,第二个指字符出现次数
//按值排序
void SortByValue(map<char, int> &mapHash, vector<T> &vecHash)
{
for (auto it = mapHash.begin(); it != mapHash.end(); it++){
vecHash.push_back(make_pair(it->first, it->second)); //make_pair创建键值对
}
for (int i = 0; i < vecHash.size(); i++){
for (int j = i; j < vecHash.size(); j++){
if (vecHash[i].second < vecHash[j].second){ //value降序排序
swap(vecHash[i], vecHash[j]);
}
else if (vecHash[i].second == vecHash[j].second){ //ASCII码由小到大排序
if (vecHash[i].first > vecHash[j].first){
swap(vecHash[i], vecHash[j]);
}
}
}
}
}
int main ()
{
char str;
map<char, int> mapHash;
vector<T> vecHash;
while (cin >> str){
auto it = mapHash.find(str);
if (it != mapHash.end()) { // 键存在,修改其对应的值
it->second += 1;
} else { // 键不存在,可以选择插入新的键值对
mapHash[str] = 1;
}
}
// 遍历并输出元素
SortByValue(mapHash, vecHash);
for (int i = 0; i < vecHash.size(); i++){
cout << vecHash[i].first ;
// cout << " "<< vecHash[i].second << endl;
}
cout << endl;
return 0;
}
联想公司福利 1493人发布

查看7道真题和解析