我正在计算每个单词在文本文件中出现的次数。我想避免出现这种情况,因此我会减少我的输入,然后进行计数。我有一个地图数据结构,其中有 string 和 int 来保持计数。现在,当我输出单词及其计数时,我不希望单词为小写,而是希望它保持其原始大小写。因此,为了计算所有单词应该更改为小写,但在输出时它们都应该是原来的大小写。有没有办法仅使用一张地图来实现这一目标?
第三个模板参数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();
}
};
然后实例化你的地图:
typedef std::map<std::string, unsigned, CaseInsensitive> MyWordCountingMap;
注意:仅保留第一个拼写(这对您来说似乎没问题)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)