如何在Delphi中按字母顺序重新排列字符串?

1 delphi string character alphabetical-sort

我已经看过很多关于如何按字母顺序对数组中的字符串进行排序的内容。我想知道是否可以获取一个单独的字符串(例如,您通过 a 输入的单个单词TEdit)并重新排列该字符串,使其按字母顺序排列。例如:

  • 你会接受这个词'strong'
  • 这将被重新排列为'gnorst'.

And*_*and 13

\n

是否可以按字母顺序重新排列 [D]elphi[?] 中的字符串

\n
\n

这是一个有点奇怪的问题,因为它的答案很简单:“是的,当然”。

\n

另外,如果您对 Delphi字符串排序算法有基本的了解,那么实现它并不困难。因此,脾气暴躁的 Stack Overflow 用户可能会要求你简单地分别学习这两门学科,然后使用组合知识来解决任务。

\n

然而,也许真正的问题是,“在现代 Delphi 版本中是否有规范(或简单)的方法来做到这一点?”

\n

如果是这样,这个问题就变得更有趣,而且实际上非常容易回答:

\n
var A := \'strong\'.ToCharArray;\nTArray.Sort<Char>(A);\nShowMessage(string.Create(A));\n
Run Code Online (Sandbox Code Playgroud)\n

如果你只包括Generics.Collections.

\n

第一行声明一个变量A。它的类型是自动确定的TArray<Char>,即(两字节 Unicode 字符)的动态数组。Char的值A只是字符串的字符数组:\'s\', \'t\', \'r\', \'o\', \'n\', \'g\'

\n

第二行使用默认比较器对该数组进行排序。于是就A变成了\'g\', \'n\', \'o\', \'r\', \'s\', \'t\'。例如,您可以使用重载方法来指定考虑当前区域设置的不同比较器。\xc2\xb9

\n

第三行从此字符数组创建一个新字符串 ,\'gnorst\'并将其显示在消息框中。

\n

一两年前,还没有string.ToCharArrayTArray、 或string.Create。但是当然,您可以手动(轻松地)从字符串中获取字符数组,使用您在计算机科学 101 中学到的方法对其进行排序,然后从此数组创建一个新字符串。或者,如果您想变得聪明,您可以在字符串堆对象中就地执行此操作。

\n
\n

\xc2\xb9 实际上,“按字母顺序”排序比您想象的要复杂得多。例如,如何对“aA\xc3\x85\xc3\x84\xc3\xa4\xc3\xa5\xc3\xa1\xc3\x80\xe2\x98\x834\xce\x91A\xcc\x88\xc3\”进行排序xa3\xc3\xa2\xc4\x80"?瑞典和德国的结果会一样吗?另请注意 \xc3\x84 和 A\xcc\x88 之间以及 A 和 \xce\x91 之间的区别。)

\n