c++ 给出一个字符申(长度<10000),统计其中四个字母(b、 m、 p 七)出现的次数,并按出现次数降序抢出字母和该宁怪的出现次数 (不区分大小写),如果两个字母的出现次数一样,则按照宁仔 升序输出。 输入说明: -个字符串。 输出说明,分4行输出,每个字仔一行。格式为字母和出现次数, 以单个空格分隔
时间: 2024-03-12 10:49:27 浏览: 129
好的,这是一个简单的 C++ 代码实现:
```c++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct Letter {
char c;
int count;
};
bool cmp(Letter a, Letter b) {
if (a.count == b.count) {
return a.c < b.c;
} else {
return a.count > b.count;
}
}
int main() {
char str[10001];
cin.getline(str, 10001);
int len = strlen(str);
Letter letters[4] = {{'b', 0}, {'m', 0}, {'p', 0}, {'7', 0}};
for (int i = 0; i < len; i++) {
char c = str[i];
if (c == 'B' || c == 'b') {
letters[0].count++;
} else if (c == 'M' || c == 'm') {
letters[1].count++;
} else if (c == 'P' || c == 'p') {
letters[2].count++;
} else if (c == '7') {
letters[3].count++;
}
}
sort(letters, letters+4, cmp);
for (int i = 0; i < 4; i++) {
cout << letters[i].c << " " << letters[i].count << endl;
}
return 0;
}
```
解释一下代码:
首先读入一个字符串,然后定义一个结构体 Letter 表示每个字母及其出现次数。然后通过一个循环遍历字符串,如果遇到 b、m、p、7 字母,则对应的 Letter 的 count 值加 1。
接下来,使用 sort 函数对四个 Letter 按照出现次数降序排序,如果出现次数相同,则按照字母升序排序。最后输出排序后的结果即可。
希望能够解决您的问题!
阅读全文