写点什么

Qt|字符排序以及转化问题

  • 2022 年 7 月 12 日
  • 本文字数:1088 字

    阅读完需:约 4 分钟

Qt|字符排序以及转化问题

最近用到了字符串的排序问题,主要功能包括:


1:中文字符串排序

2:英文字符串排序

3:数字排序

4:字符串字母转换


那么,接下来我会详细的介绍以上这些功能哦~

1:中文字符串排序

中国汉字博大精深,我们在排序的时候最难得也是中文字符串的排序了。不过,在 Qt 中提供了一个非常方便的类,解决了排序难的问题:QLocale 类

QLocale 类用各种语言在数字和它们的字符串表示之间进行转换。QLocale 在其构造函数中使用语言/国家对进行初始化,并提供类似于 QString 中的数字到字符串和字符串到数字的转换函数。

针对以上类的使用,我们来解决如何对中文字符串排序吧!

  • 中文字符串正排序

QLocale loc(QLocale::Chinese, QLocale::China);
复制代码

构造 QLocale 类,并且指定使用中文格式转换形式

loc.languageToString(QLocale::Chinese);
复制代码

返回一个包含语言名称的 QString 字符串,获取到转换后的信息之后,将字符串信息新型排序

QCollator qoc(loc);qSort(listData.begin(), listData.end(), qoc); //正序排序
复制代码
  • 中文字符串倒排序

与正排序有些类似,只是在 qSort 时稍微有些变化,其他都是一致的,这里就不详细介绍了哟~

2:英文字符串排序

该功能我们继续沿用第一个功能的类:QLocale

实现起来写法比较相似,只是将 Chinese 转换成 English

QLocale loc(QLocale::English);
复制代码

构造英文类型的 QLocale 类信息

loc.languageToString(QLocale::English);
复制代码

返回一个包含语言名称的 QString 字符串,获取到转换后的信息之后,将字符串信息新型排序

QCollator qoc(loc);qSort(listData.begin(), listData.end(), qoc); //正序排序
复制代码

3:数字排序

与上述两个功能相比较而言,还是比较简单的,这里我们用 vector 来存储需要排序的数据。

对于这种只存储一个值的容器来说,排序只需要使用 sort 就可以了。

但是,需要注意的一点是:set 容器,使用这个容器的时候还需要自己重载比较运算符,所以,我们一般情况下会使用 Vector 这种顺序存储的容器

假设,存储数据的容器定义为:std::vector<int> vetData

  • 对整型数据正排序

sort(vetData.begin(), vetData.end());
复制代码
  • 对整型数据倒排序

sort(vetData.rbegin(), vetData.rend());
复制代码

4:字符串字母转换

对于 CString 的字符串来说,直接一个 API 就可以搞定了,那么我们要是自己转换呢?

虽然功能比较基类,就当自己学习了!

我们知道 ASCII 码中,大写字母与小写字母的值是不一致的。那么,当我们遇到小写字母的值之后,直接替换成大写字母的 ASCII 值,就可以实现字符串的转换了!

for (int i=0; i< sText.length(); i++){	if (sText[i] >= 'A' && sText[i] <= 'Z')	{		sText[i] += 32;		continue;	}}return sText;
复制代码


今天的功能比较简单,就更新到这里喽~

我是中国好公民 st,一名 C++开发程序媛~

发布于: 刚刚阅读数: 7
用户头像

书山有路勤为径,学海无涯苦作舟 2022.07.01 加入

擅长语言:C++ 涉及语言:Python

评论

发布
暂无评论
Qt|字符排序以及转化问题_qt_中国好公民st_InfoQ写作社区