博客
关于我
c 语言不区分大小写吗,C+中不区分大小写的字符串比较
阅读量:781 次
发布时间:2019-03-24

本文共 1400 字,大约阅读时间需要 4 分钟。

在C++ Programming中,字符特性(char_traits)是一个非常重要的概念。它允许我们定义字符的比较规则、复制规则以及转换规则。默认的字符特性是一个简单的比较,考虑字符的内部Encoding。然而,假设我们需要定义一个新的字符比较规则,比如不区分大小写,那么我们可以自定义字符特性,继承自std::char_traits,并重定义与比较相关的函数。

我们可以定义一个简单的示例char_traits:

struct ci_char_traits : public std::char_traits {
public:
static bool eq(char c1, char c2) {
return std::toupper(c1) == std::toupper(c2);
}
static bool ne(char c1, char c2) {
return std::toupper(c1) != std::toupper(c2);
}
static bool lt(char c1, char c2) {
return std::toupper(c1) < std::toupper(c2);
}
static int compare(const char* s1, const char* s2, size_t n) {
while (n-- != 0) {
if (std::toupper(*s1) > std::toupper(*s2)) {
return 1;
}
if (std::toupper(*s1) < std::toupper(*s2)) {
return -1;
}
++s1;
++s2;
}
return 0;
}
static const char* find(const char* s, int n, char a) {
while (n > 0 && std::toupper(*s) != std::toupper(a)) {
++s;
}
return s;
}
};

然后,我们可以使用这个自定义的char_traits来实例化std::basic_string:

typedef std::basic_string
ci_string;

这个char_traits的定义方式选择了不区分字符大小写的比较方式。即使输入的字符是大写或小写,它们也会被统一转换为大写进行比较。这种方法非常有用,尤其是当你有多种语言字符混杂在一起时。

例如,使用这个ci_string,你可以方便地比较字符串,而不需要关心每个字符的原始大小写状态。

这个特性定义中的compare函数也取决于统一字符大小写后比较大小,而不是原样比较。这使得字符串的大小比较不再受大小写的影响。

转载地址:http://dyrkk.baihongyu.com/

你可能感兴趣的文章
MySQL 的mysql_secure_installation安全脚本执行过程介绍
查看>>
MySQL 的Rename Table语句
查看>>
MySQL 的全局锁、表锁和行锁
查看>>
mysql 的存储引擎介绍
查看>>
MySQL 的存储引擎有哪些?为什么常用InnoDB?
查看>>
mysql 索引
查看>>
MySQL 索引失效的 15 种场景!
查看>>
MySQL 索引深入解析及优化策略
查看>>
MySQL 索引的面试题总结
查看>>
mysql 索引类型以及创建
查看>>
MySQL 索引连环问题,你能答对几个?
查看>>
Mysql 索引问题集锦
查看>>
Mysql 纵表转换为横表
查看>>
mysql 编译安装 window篇
查看>>
mysql 网络目录_联机目录数据库
查看>>
MySQL 聚簇索引&&二级索引&&辅助索引
查看>>
Mysql 脏页 脏读 脏数据
查看>>
mysql 自增id和UUID做主键性能分析,及最优方案
查看>>
Mysql 自定义函数
查看>>
mysql 行转列 列转行
查看>>