gpt4 book ai didi

c++ - 字符串数组中出现次数最多的元素

转载 作者:行者123 更新时间:2023-11-28 07:45:02 29 4
gpt4 key购买 nike

我需要找到字符串数组中出现次数最多的元素。我不确定该怎么做,因为我对此没有太多经验。我不知道指针/哈希表。

我已经为整数做了这个,但我不能让它对字符串起作用。

我的版本:

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a[]={1,2,3,4,4,4,5};
int n = sizeof(a)/sizeof(int );
int *b=new int [n];
fill_n(b,n,0); // Put n times 0 in b

int val=0; // Value that is the most frequent
for (int i=0;i<n;i++)
if( ++b[a[i]] >= b[val])
val = a[i];

cout<<val<<endl;
delete[] b;
return 0;
}

感谢任何有关查找字符串数组中出现频率最高的元素的帮助!

最佳答案

首先,考虑使用 C++ 容器(如 vector )而不是普通数组。 (如果需要,搜索“array to vector”或类似的内容以在它们之间进行转换。)

然后,如果你可以使用 C++11,你可以做这样的事情(如果没有 C++11,它会变得有点冗长,但仍然可行):

std::string most_occurred(const std::vector<std::string> &vec) {
std::map<std::string,unsigned long> str_map;
for (const auto &str : vec)
++str_map[str];

typedef decltype(std::pair<std::string,unsigned long>()) pair_type;

auto comp = [](const pair_type &pair1, const pair_type &pair2) -> bool {
return pair1.second < pair2.second; };
return std::max_element(str_map.cbegin(), str_map.cend(), comp)->first;
}

这是一个与旧 C++ 兼容的版本

bool comp(const std::pair<std::string,unsigned long> &pair1,
const std::pair<std::string,unsigned long> &pair2) {
return pair1.second < pair2.second;
}

std::string most_occurred(const std::vector<std::string> &vec) {
std::map<std::string,unsigned long> str_map;
for (std::vector<std::string>::const_iterator it = vec.begin();
it != vec.end(); ++it)
++str_map[*it];
return std::max_element(str_map.begin(), str_map.end(), comp)->first;
}

关于c++ - 字符串数组中出现次数最多的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055800/

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