c++ - 查找单个字符串中重复次数最多和次多的字符

标签 c++

我能找到重复次数最多的字符,但我找不到第二多重复的字符

我不明白找到第二个最重复的字符的逻辑

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/

相关文章:

c++ - 调试类,C++,链接器错误

C++ 类后跟模板关键字

c++ - 对象指针以相反的顺序打印结果

具有灵活返回类型的 C++ 函数模板

c++ - 为什么这个指数有效? C++

c++ - 什么是默认命名空间

c++ - boost::lockfree::spsc_queue、boost::lockfree::queue、串行队列操作之间的比较

c++ - C++14 是否要求删除表达式必须调用 `void operator::delete(void*, std::size_t)` 而不是 `void::operator delete(void*)` ?

c++ - 模板可以在不丢失信息的情况下传递参数类型

c++ - 创建类数组时出错