设计一个c++程序完成以下问题, 给出一个字符串(长度<10000),统计其中四个字母(b、m..P: )出现的次数,并按出现次数降序输出字母和该字母的出现次数 (不区分大小写),如果两个字母的出现次数一样,则按照字母 升序辆出。 输入说明:一个字符串。 以单个空格分隔。 输出说明:分4行输出,每个字母一行。格式为字母和出现次数,包含注释
时间: 2024-03-11 07:47:37 浏览: 57
统计字符出现次数的C++程序
这个问题和前面两个问题重复了,下面是一个参考解答:
```c++
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
string s;
getline(cin, s); // 输入一个字符串
int freq[4] = {0}; // 统计4个字母出现的次数
for(int i=0; i<s.length(); i++)
{
if(s[i] == 'b' || s[i] == 'm' || s[i] == 'p' || s[i] == ':')
freq[s[i]-'b']++; // 统计小写字母出现的次数
else if(s[i] == 'B' || s[i] == 'M' || s[i] == 'P' || s[i] == ':')
freq[s[i]-'B']++; // 统计大写字母出现的次数
}
pair<char, int> p[4]; // 存储字母和对应的出现次数
for(int i=0; i<4; i++)
p[i] = make_pair('b'+i, freq[i]);
sort(p, p+4, [](pair<char, int> a, pair<char, int> b){
if(a.second == b.second) return a.first < b.first; // 次数相同按照字母升序排列
else return a.second > b.second; // 次数不同按照次数降序排列
});
for(int i=0; i<4; i++)
cout << p[i].first << " " << p[i].second << endl; // 输出字母和出现次数
return 0;
}
```
阅读全文