gpt4 book ai didi

c++ - c++ - 如何按降序打印字符串中每个字母的频率?

转载 作者:行者123 更新时间:2023-11-30 00:44:04 26 4
gpt4 key购买 nike

#include <iostream>
#include <string>
using namespace std;
int main () {
int cnt[26] {};
char alpha[26];
string s = "abcdefffggghiii";
for (int i = 0; i < s.length(); i++) {
cnt[s[i] - 'a']++;
}

for (int i = 'a'; i <= 'z'; i++) {
alpha[i - 'a'] = i;
}
for (int i = 0; i < 26; i++) {
if (cnt[i]) {
cout << alpha[i] << " " << cnt[i] << endl;
}
}

return 0;
}

我想按降序打印字符串中每个字母的频率。我想对 cnt 数组进行排序并从 25 打印到 0 但它只会打印带有错误字母的频率。我怎样才能修复它以降序打印例如 i 3 等等?

最佳答案

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main() {

// Create result container
auto x = vector<pair<char, int>>();

std::string s = "abcdefffggghiii";
for (auto& l : s) {
// Find the item that corresponds to letter
auto pLetter =
find_if(x.begin(), x.end(), [&l](pair<char, int> &arg) {
return arg.first == l;
});

if (pLetter != x.end())
pLetter->second++; // If item corresponding to letter is found, increment count
else {
x.push_back(make_pair(l, 1)); // Otherwise, create a new result entry
}
}

// Sort results by count in descending order
std::sort(x.begin(), x.end(),
[](auto &left, auto &right) { return left.second > right.second; });

for (auto i = x.begin(); i != x.end(); ++i)
std::cout << i->first << ':' << i->second << '\n';
}

生产

f:3
g:3
i:3
a:1
b:1
c:1
d:1
e:1
h:1

你可以运行它here .这将 C++14 lambda 用于 find_if 和排序谓词。此解决方案与@Retired Ninja 的解决方案非常相似,不同之处在于结果 vector 仅包含那些具有非零计数的字母的项目。这意味着它可以扩展到 wstrings 而无需大的结果 vector 。

关于c++ - c++ - 如何按降序打印字符串中每个字母的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51006754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com