2011-05-13 97 views
2

我正在研究需要分类的程序(c)。 排序的要求之一是:数字排序。如何对包含数字和字符的UTF-8字符串进行排序?

应从最低有效位(即最右边的数字)和最重要的 数字(即最左边的数字)完成数字排序,使得数字21,2和11按如下排序:2,11 ,21

给定的字符串是UTF-8,可能包含特殊字符,数字,拉丁字母,斯拉夫字母,平假名/片假名等

它给下面的排序顺序:

1A

1B

110A

Henry7

Henry24

+0

在实施一些要求之前,我们必须理解它。 “数字排序”是什么意思,还有什么字母?我们是否想要丢弃非数字字符或什么?你提供了一个示例输入 - 你是否清楚输出示例?如果是这样,给我们。 – leonbloy 2011-05-13 11:21:13

+0

leonbloy @:是的,你说得对。在实施一些要求之前,我们必须理解它。不,我们不会丢弃非数字字符。上面给出的字符串是排序的输出....像下面的排序奥德是需要:1. 7ash 2.22ash 3. ash4 4. ash22 – 2011-05-16 07:49:45

回答

2

您可能需要考虑使用ICU library(Unicode的国际组件),其中包括collation (sorting) API

+0

sudocode @:谢谢,但我们不能使用ICU .... – 2011-05-16 07:52:29

+0

然后你将不得不自己写一个整理器,在unicode.org里面有机器可读的文件,告诉你以何种顺序排序字符.http://unicode.org/reports/tr10/ – piotr 2011-07-15 22:42:55

0

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

+0

piotr @你能提供一些示例代码吗? – 2011-05-16 07:45:10

2

我想你的意思是“将文本字符串中的数字字符排序为数字”。你可以尝试使用Qt的QString::localeAwareCompare(),它使用语言环境和平台设置来比较字符串。至少在OS X上,这应该表示它将尊重用户所选的语言环境,其中包括您想要的行为。

相关问题