我能找到重复次数最多的字符,但我找不到第二多重复的字符
我不明白找到第二个最重复的字符的逻辑
void most_frequent_letter(string str, struct frequents result[])
int len = str.length();
int max = 0, i = 0, k = 0, Secmax = 0, m = 0;
for (i = 0 ; i <= len; ++i)
{
if (str[i] >= 48 && str[i] <= 57)
{
result[0].count = 0;
break;
}
if(str[i] >= 65 && str[i] <= 90)
{
str[i] += 32;
}
result[i].letter = str[i];
result[i].count++;
if (result[i].count > max && result[i].letter != ' ')
{
max = result[i].count;
result[0].count = result[i].count;
result[0].letter = str[i];
}
}
cout << result[0].letter << endl;
最佳答案
这是一个运行良好的示例,如果您愿意,可以对其进行优化。
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
#include <iterator>
void find_most_repeated(std::string strData)
{
std::map<char, int> mChars;
for (int i = 0; i < strData.size(); i++)
mChars[strData[i]] ++;
std::vector<std::pair<char, int>> v{ std::make_move_iterator(begin(mChars)), std::make_move_iterator(end(mChars)) };
std::sort(begin(v), end(v),
[](const std::pair<char, int>& p1, const std::pair<char, int>& p2) {return p1.second > p2.second; });
std::cout << v[0].first << " " << v[1].first << std::endl;
}
int main()
{
find_most_repeated(std::string("asdaaaasssaaaaa"));
}
关于c++ - 查找单个字符串中重复次数最多和次多的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57161711/