最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

中英文数字字符串排序(标准库)

IT圈 admin 2浏览 0评论

中英文数字字符串排序(标准库)

需求

对ui显示的表格进行排序,需支持中文字母排序,但是sqlite数据库不支持中文的拼音和笔画排序,这样就会导致排序中文显示顺序无规律。这个时候,就需要自己写一个排序功能,且排序支持中文拼音排序。

示例

有一个字符串链表,有n个字符串,需要对这些字符串进行排序(支持中文拼音排序)。
代码定义如下:

QStringList list;list<< "1中中句"<< "方法"<< "2中句中"<< "种"<< "句外"<< "中中"<< "句章 "<< "a强蛟厂"<< "b甜甜"<< "章章"<< "1方法"<< "rgerag"<< "efw"<< "eed"<< "easw"<< "我的杀杀杀 "<< "跳跳框框"<< "条条奔奔"<< "希望小学"<< "小桃"<< "小涛"<< "张麻子"<< "张强"<< "小李飞刀"<< "小李他娘"<< "12五"<< "874ff的"<< "哈哈哈,很强";

排序方法

比较函数:

//比较策略
bool LessThan(const QString &s1, const QString &s2)
{return (s1.localeAwareCompare(s2) < 0);
}

标准库中排序函数sort的使用:

std::sort(sList.begin(), sList.end(), LessThan);	//迭代器 + 函数指针

现象

由于代码比较简单,这里就不做demo了,展示排序结果:

排序结果为:

(“12五”, “1方法”, “1中中句”, “2中句中”, “874ff的”, “a强蛟厂”, “b甜甜”, “easw”, “eed”, “efw”, “rgerag”, “方法”, “哈哈哈,很强”, “句外”, "句章 ", “条条奔奔”, “跳跳框框”, "我的杀杀杀 ", “希望小学”, “小李飞刀”, “小李他娘”, “小涛”, “小桃”, “张麻子”, “张强”, “章章”, “中中”, “种”)

显然排序顺序依次为英文符号、数字、字母、中文符号、中文(拼音)。

如果需要倒序,则将比较函数修改即可:

//比较策略
bool LessThan(const QString &s1, const QString &s2)
{return (s1.localeAwareCompare(s2) > 0);
}

又或者使用rbegin、rend函数进行倒序排序,这样的操作没有试过。

中英文数字字符串排序(标准库)

需求

对ui显示的表格进行排序,需支持中文字母排序,但是sqlite数据库不支持中文的拼音和笔画排序,这样就会导致排序中文显示顺序无规律。这个时候,就需要自己写一个排序功能,且排序支持中文拼音排序。

示例

有一个字符串链表,有n个字符串,需要对这些字符串进行排序(支持中文拼音排序)。
代码定义如下:

QStringList list;list<< "1中中句"<< "方法"<< "2中句中"<< "种"<< "句外"<< "中中"<< "句章 "<< "a强蛟厂"<< "b甜甜"<< "章章"<< "1方法"<< "rgerag"<< "efw"<< "eed"<< "easw"<< "我的杀杀杀 "<< "跳跳框框"<< "条条奔奔"<< "希望小学"<< "小桃"<< "小涛"<< "张麻子"<< "张强"<< "小李飞刀"<< "小李他娘"<< "12五"<< "874ff的"<< "哈哈哈,很强";

排序方法

比较函数:

//比较策略
bool LessThan(const QString &s1, const QString &s2)
{return (s1.localeAwareCompare(s2) < 0);
}

标准库中排序函数sort的使用:

std::sort(sList.begin(), sList.end(), LessThan);	//迭代器 + 函数指针

现象

由于代码比较简单,这里就不做demo了,展示排序结果:

排序结果为:

(“12五”, “1方法”, “1中中句”, “2中句中”, “874ff的”, “a强蛟厂”, “b甜甜”, “easw”, “eed”, “efw”, “rgerag”, “方法”, “哈哈哈,很强”, “句外”, "句章 ", “条条奔奔”, “跳跳框框”, "我的杀杀杀 ", “希望小学”, “小李飞刀”, “小李他娘”, “小涛”, “小桃”, “张麻子”, “张强”, “章章”, “中中”, “种”)

显然排序顺序依次为英文符号、数字、字母、中文符号、中文(拼音)。

如果需要倒序,则将比较函数修改即可:

//比较策略
bool LessThan(const QString &s1, const QString &s2)
{return (s1.localeAwareCompare(s2) > 0);
}

又或者使用rbegin、rend函数进行倒序排序,这样的操作没有试过。

发布评论

评论列表 (0)

  1. 暂无评论