字符串的字典比较[不区分大小写]
lexicographic comparison of strings [case-insensitive]
我想按字典顺序对文件的文本进行排序,但我很难理解字典顺序的真正作用。
排序字符串产生另一个问题;关系操作符使用ASCII值,因此
betty < Diane
应该为真,但却为假。
考虑一个示例列表:贝蒂,黛安,123岁,安娜,梅根,查尔斯,2岁,12岁。
如何按字典顺序设置?
方法:
- 使用
map <convert_to_lower_case(words) as string, index as integer>
将列表中的所有单词放入。 -
之后,创建一个排序向量
myVec
使用:for(it_type iterator = m.begin(); iterator != m.end(); iterator++) { myVec.push_back(original_list[it->second]); }
myVec
是您正在寻找的按字典顺序排序的列表。您需要实现convert_to_lower_case(word)
:
for(int i = 0; str[i]; i++){
word[i] = tolower(str[i]);
}
另一个答案也很好,使用比较器对向量进行排序。
这不是你想要的吗?
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cctype>
int main() {
std::vector<std::string> v {"Diane", "123", "Ana", "Megan", "charles", "two", "12"};
for (const auto& s : v) {
std::cout << s << ' ';
};
std::cout << 'n';
std::sort(v.begin(), v.end(), [](const std::string& a, const std::string& b) {
for (int i = 0 ; i < std::min(a.size(), b.size()) ; i++) {
const auto a_char = std::tolower(a[i]);
const auto b_char = std::tolower(b[i]);
if (a_char != b_char) {
return a_char < b_char;
}
}
return a.size() < b.size();
});
for (const auto& s : v) {
std::cout << s << ' ';
};
std::cout << 'n';
return 0;
}
stdout看起来像这样:
Diane 123 Ana Megan charles two 12
12 123 Ana charles Diane Megan two
使用compareToIgnoreCase方法
相关文章:
- 使字母检查不区分大小写
- 如何执行不区分大小写的字符串比较?
- 函数中的切换大小写语句不会切换C++
- CMake 添加不区分大小写的源文件
- 提升program_option配置文件的不区分大小写的解析
- 如何提升Perl正则表达式匹配,支持区分大小写/不区分大小写
- 对字符串向量进行排序,但不区分大小写
- 比较最后一个字符,不区分大小写(带谓词?
- 如何创建一个程序来标识最长的子字符串回文,而不考虑字母大小写
- C Visual Studio代码不使用工作区中的单个文件夹编译
- 如何在交换机中将一个枚举值标记为不适当的大小写
- 在字符串的 boost::unordered_set 中使用 Lambda 函数 - 不区分大小写
- 程序在我的C++工作区中找不到头文件
- 开关大小写不调用其中的函数
- 为什么不区分大小写适用于 std::unordered_set的 std::hash 函数?
- 为什么我的代码在开关大小写中不起作用
- 比较字符串大小写不区分的简单方法是什么?
- 如何使字符串中的每个字母不区分大小写
- 不区分大小写的字符串
- Qt:如何在大小写不敏感模式下减去QString的两个QSet