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;

今天的更新就到这里喽~

我是糯诺诺米团,一名C++开发程序媛~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt中,可以使用QString类将字符数组转换为字符串。QString类是Qt的核心类之一,可以处理Unicode编码的字符串。它支持多种字符串操作,如拼接、查找、替换等等。下面是一个示例代码,演示了如何将字符数组转换为字符串: ```cpp char buffer[] = "Hello World"; QString str = QString::fromUtf8(buffer); ``` 在上面的代码中,首先定义了一个字符数组buffer,内容为"Hello World"。然后使用QString的静态方法fromUtf8将字符数组转换为字符串,最终得到了一个名为str的QString对象。fromUtf8方法指定了字符数组的编码方式为UTF-8,如果字符数组采用其他编码方式,则需要指定相应的方法。例如,如果采用GB2312编码方式,则可以使用fromLocal8Bit方法: ```cpp char buffer[] = "中文字符串"; QString str = QString::fromLocal8Bit(buffer); ``` 这样,就可以将字符数组转换为QString类型的字符串了。需要注意的是,在转换时需要保证字符数组的结束符号'\0',否则将无法正常转换。当然,如果想要在QString中使用字符数组的部分内容,可以借助QByteArray类实现。在Qt中,QString和QByteArray之间可以进行相互转换,因此可以使用以下代码将字符数组中的前n个字符转换为字符串: ```cpp char buffer[] = "Hello World"; int n = 5; QString str = QString::fromUtf8(QByteArray(buffer, n)); ``` 在上面的代码中,首先将字符数组中的前n个字符构造成一个QByteArray对象,然后使用fromUtf8方法将其转换为QString类型的字符串。这样就可以获得指定长度的字符串了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糯诺诺米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值