博客
关于我
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 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>