生成D中给定字符串的所有排列

时间:2016-11-02 13:29:11

标签: d

我正在尝试在D中编写一个程序,为给定的字符串生成所有排列。我一直在尝试使用函数nextPermutation,但它只与int兼容。我无法使用char数组。我想知道是否有人可以帮我指出正确的方向?这就是我到目前为止所做的:

import std.stdio;
import std.algorithm.sorting: nextPermutation;

void main()
{
    char array[] = {'a','b','c'};

do
{
        writeln(array);

} while (nextPermutation(array));

}

1 个答案:

答案 0 :(得分:3)

所以它不仅与int兼容,它是Phobos认为“双向”和“可交换”的任何东西 - 它可以轻松反转并交换单个元素的数组,并且它认为普通字符串是不可交换的,因为UTF-8编码。由于其可变长度元素编码,交换两个字符可能需要重新整理整个数组,这将比函数允许的要贵得多。

因此,最简单的方法是使用Phobos认为可交换的类型:UTF-32字符串,又名dchar[]

如果您只是将char更改为dchar,则会有效。

您可能还希望将数组语法从C样式更改为D样式:

dchar[] array = ['a','b','c'];

你去。

所以,我说“它考虑”因为这是一个有争议的图书馆决定。我认为UTF-32并不是真正可以替换的原因,因为UTF-8不是 - 可能存在配对元素,改变它们的顺序会破坏数据。但是对于像你这样的简单案例,你不必担心这一点。