我正在尝试在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));
}
答案 0 :(得分:3)
所以它不仅与int兼容,它是Phobos认为“双向”和“可交换”的任何东西 - 它可以轻松反转并交换单个元素的数组,并且它认为普通字符串是不可交换的,因为UTF-8编码。由于其可变长度元素编码,交换两个字符可能需要重新整理整个数组,这将比函数允许的要贵得多。
因此,最简单的方法是使用Phobos认为可交换的类型:UTF-32字符串,又名dchar[]
。
如果您只是将char
更改为dchar
,则会有效。
您可能还希望将数组语法从C样式更改为D样式:
dchar[] array = ['a','b','c'];
你去。
所以,我说“它考虑”因为这是一个有争议的图书馆决定。我认为UTF-32并不是真正可以替换的原因,因为UTF-8不是 - 可能存在配对元素,改变它们的顺序会破坏数据。但是对于像你这样的简单案例,你不必担心这一点。