我正在研究需要排序的程序(在c中)。 排序的要求之一是:数字排序。
数字排序应从最低有效数字(即最右边的数字)到最高有效数字完成 数字(即最左边的数字)使得数字21,2和11按如下方式排序:2,11,21。
给定的字符串是UTF-8,可能包含特殊字符,数字,拉丁字母,西里尔字母,平假名/片假名等。
它给出了以下排序顺序:
1
1A
图1b
2
11
110
110A
Henry7
Henry24
答案 0 :(得分:2)
您可能需要考虑使用ICU library(Unicode的国际组件),其中包含collation (sorting) API。
答案 1 :(得分:2)
我认为你的意思是“将文本字符串中的数字字符排序为数字。”您可以尝试使用Qt的QString::localeAwareCompare(),它使用区域设置和平台设置来比较字符串。至少在OS X上,这应该意味着它将尊重用户选择的区域设置,其中包括您想要的行为。
答案 2 :(得分:0)
或者,如果您不关心区域设置,可以将其转换为utf16并按代码点值排序。
答案 3 :(得分:0)
通过与std::sort进行检查,使用QString::localeAwareCompare()的自定义比较器功能。
比较器功能:
void sortLocaleAware(QStringList &sList)
{
std::sort(sList.begin(), sList.end(), [](const QString &s1, const QString &s2){
return s1.localeAwareCompare(s2) < 0;
});
}
用法:
QStringList myList = { "4a", "3b", "52a" ,"13ş", "34İ" };
sortLocaleAware(myList);