gpt4 book ai didi

C++ 计数和映射

转载 作者:搜寻专家 更新时间:2023-10-31 00:02:26 24 4
gpt4 key购买 nike

我正在计算每个单词在文本文件中出现的次数。我想避免案例,因此我对我的输入做了 tolower 然后计数。我有一个具有字符串和整数的 map 数据结构来保持计数。现在,当我输出单词及其计数时,我不想让单词变成小写,而是希望它保持原来的大小写。所以,为了计算所有的单词应该变成小写,但在给出输出时它们都应该是它们的原始大小写。无论如何只使用一张 map 就可以实现这一点?

最佳答案

std::map 的第三个模板参数是比较器类型。您可以提供自己的比较操作,在您的情况下是不区分大小写的操作。

struct CaseInsensitive {
bool operator()(std::string const& left, std::string const& right) const {
size_t const size = std::min(left.size(), right.size());

for (size_t i = 0; i != size; ++i) {
char const lowerLeft = std::tolower(left[i]);
char const lowerRight = std::tolower(right[i]);

if (lowerLeft < lowerRight) { return true; }
if (lowerLeft > lowerRight) { return false; }

// if equal? continue!
}

// same prefix? then we compare the length
return left.size() < right.size();
}
};

然后实例化你的 map :

typedef std::map<std::string, unsigned, CaseInsensitive> MyWordCountingMap;

注意:只保留第一个拼写(你觉得没问题)

关于C++ 计数和映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8061317/

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