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