Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成D中给定字符串的所有置换_D - Fatal编程技术网

生成D中给定字符串的所有置换

生成D中给定字符串的所有置换,d,D,我试图用D写一个程序,为给定的字符串生成所有排列。我一直在尝试使用函数nextpermutate,但它只与int兼容。我无法让它与字符数组一起工作。我想知道是否有人能帮我指出正确的方向?这就是我到目前为止所做的: import std.stdio; import std.algorithm.sorting: nextPermutation; void main() { char array[] = {'a','b','c'}; do { writeln(array);

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

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

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

do
{
        writeln(array);

} while (nextPermutation(array));

}

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

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

如果您只是将
char
更改为
dchar
,它就可以工作了

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

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

所以,我说“它考虑”是因为这是一个有争议的图书馆决定。我认为UTF-32实际上是不可交换的,原因与UTF-8不可交换的原因类似——可能存在成对的元素,更改它们的顺序会损坏数据。但对于像您这样的简单情况,您不必担心这个问题。

是的,
auto-array=[“一”、“二”、“三”]也可以。