如何对包含数字和字符的 UTF-8 字符串进行排序人物?
我正在开发需要排序的程序(c)。 排序的要求之一是:数字排序。
数字排序应从最低有效数字(即最右边的数字)到最高有效数字完成 数字(即最左边的数字),使得数字 21、2 和 11 排序如下:2, 11, 21。
给定的字符串采用 UTF-8 格式,可能包含特殊字符、数字、拉丁字母、西里尔字母、平假名/片假名等。
它给出以下排序顺序:
1
1a
1b
2
11
110
110a
Henry7
Henry24
I am working on Program(in c) which require sorting.
One of the requirement of sorting is : Digits Sorting.
Digit sorting shall be completed from least significant digit (i.e. the rightmost digit) and to the most significant
digit (i.e. the leftmost digit) such that the numbers 21, 2, and 11 are sorted as follows: 2, 11, 21.
The given string is in UTF-8 and may contains Special Characters,Digits,Latin letters ,Cyrillic letters ,Hiragana/Katakana etc.
It give following sorting Order :
1
1a
1b
2
11
110
110a
Henry7
Henry24
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可能需要考虑使用 ICU 库(Unicode 国际组件),其中包括 排序(排序)API。
You might want to consider using the ICU library (International Components for Unicode), which includes a collation (sorting) API.
我认为你的意思是“将文本字符串中的数字字符排序为数字”。您可以尝试使用 Qt 的 QString::localeAwareCompare()使用区域设置和平台设置来比较字符串。至少在 OS X 上,这应该意味着它将尊重用户选择的区域设置,其中包括您想要的行为。
I think you mean "sort numerical characters in text strings as numbers." You may try using Qt's QString::localeAwareCompare() which makes use of locale and platform settings to compare strings. At least on OS X, this should mean it will respect the user selected locale which include the behavior you want.
或者,如果您不关心区域设置,则可以将其转换为 utf16 并按代码点值排序。
Or you can convert it to utf16 and sort by code point value if you don't care about locale.
通过检查 std::sort 的自定义比较器函数="https://doc.qt.io/qt-5/qstring.html#localeAwareCompare-1" rel="nofollow noreferrer">QString::localeAwareCompare()。
比较器功能:
用法:
Use std::sort's custom comparator function by checking with QString::localeAwareCompare().
Comparator function:
Usage: