如何在c ++中实现自然排序算法?

Wil*_*ill 17 c++ sorting natural-sort

我正在排序由文本和数字组成的字符串.我希望排序将数字部分排序为数字,而不是字母数字.

例如,我想要:abc1def,...,abc9def,abc10def

而不是:abc10def,abc1def,...,abc9def

有谁知道这个算法(特别是在c ++中)

谢谢

Pau*_*lin 17

我问了这个确切的问题(虽然在Java中)并且指向http://www.davekoelle.com/alphanum.html,它有许多语言的算法和实现.


Dom*_*ger 6

这被称为自然分类.还有一种算法在这里,看起来很有希望.

小心非ASCII字符的问题(请参阅Jeff关于该主题的博客文章).


Jos*_*ley 6

可以使用C++的几种自然排序实现.简要回顾:

  • natural_sort<> - 基于Boost.Regex.
    • 在我的测试中,它比其他选项慢大约20倍.
  • Dirk Jagdmann alnum.hpp,基于Dave Koelle的alphanum算法
    • MAXINT上的值可能存在整数溢出问题
  • Martin Pool's natsort- 用C语言编写,但在C++中很容易使用.
    • 我见过的唯一一个C/C++实现提供了一个不区分大小写的版本,这似乎是"自然"排序的高优先级.
    • 与其他实现一样,它实际上并不解析小数点,但它会执行特殊情况前导零(任何前导0都被假定为分数),这有点奇怪但可能有用.
    • PHP使用此算法.