如何对包含数字和字符的 UTF-8 字符串进行排序人物?

发布于 2024-11-07 08:24:35 字数 316 浏览 0 评论 0原文

我正在开发需要排序的程序(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

余生共白头 2024-11-14 08:24:35

您可能需要考虑使用 ICU 库(Unicode 国际组件),其中包括 排序(排序)API

You might want to consider using the ICU library (International Components for Unicode), which includes a collation (sorting) API.

柏林苍穹下 2024-11-14 08:24:35

我认为你的意思是“将文本字符串中的数字字符排序为数字”。您可以尝试使用 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.

千秋岁 2024-11-14 08:24:35

或者,如果您不关心区域设置,则可以将其转换为 utf16 并按代码点值排序。

Or you can convert it to utf16 and sort by code point value if you don't care about locale.

权谋诡计 2024-11-14 08:24:35

通过检查 std::sort 的自定义比较器函数="https://doc.qt.io/qt-5/qstring.html#localeAwareCompare-1" rel="nofollow noreferrer">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);

Use std::sort's custom comparator function by checking with QString::localeAwareCompare().

Comparator function:

void sortLocaleAware(QStringList &sList)
{
    std::sort(sList.begin(), sList.end(), [](const QString &s1, const QString &s2){
        return s1.localeAwareCompare(s2) < 0;
    });
}

Usage:

QStringList myList = { "4a", "3b", "52a" ,"13ş", "34İ" };
sortLocaleAware(myList);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文