我正在排序由文本和数字组成的字符串.我希望排序将数字部分排序为数字,而不是字母数字.
例如,我想要:abc1def,...,abc9def,abc10def
而不是:abc10def,abc1def,...,abc9def
有谁知道这个算法(特别是在c ++中)
谢谢
我问了这个确切的问题(虽然在Java中)并且指向http://www.davekoelle.com/alphanum.html,它有许多语言的算法和实现.
这被称为自然分类.还有一种算法在这里,看起来很有希望.
小心非ASCII字符的问题(请参阅Jeff关于该主题的博客文章).
可以使用C++的几种自然排序实现.简要回顾:
natural_sort<>
- 基于Boost.Regex.
在我的测试中,它比其他选项慢大约20倍.
Dirk Jagdmann alnum.hpp
,基于Dave Koelle的alphanum算法
MAXINT上的值可能存在整数溢出问题
Martin Pool's natsort
- 用C语言编写,但在C++中很容易使用.
我见过的唯一一个C/C++实现提供了一个不区分大小写的版本,这似乎是"自然"排序的高优先级.
与其他实现一样,它实际上并不解析小数点,但它会执行特殊情况前导零(任何前导0都被假定为分数),这有点奇怪但可能有用.
PHP使用此算法.