2016-11-02 53 views
1

我正在嘗試在D中編寫一個程序,該程序爲給定字符串生成所有排列。我一直在嘗試使用nextPermutation函數,但它只與int兼容。我無法讓它與char數組一起工作。我想知道是否有人能幫助我指出正確的方向?這是我到目前爲止有:在D中生成給定字符串的所有排列

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

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

do 
{ 
     writeln(array); 

} while (nextPermutation(array)); 

} 

回答

3

所以它不僅兼容整數,它是什麼,火衛一認爲「雙向」和「熱插拔」 - 一個數組它可以很容易逆轉和交換單個元素,並且由於UTF-8編碼,它認爲純字符串不可交換。由於其可變長度的元素編碼,交換兩個字符可能需要重新洗淨整個陣列,這比功能允許的要貴得多。

因此,最簡單的方法是使用Phobos認爲可以交換的類型:UTF-32字符串,又名dchar[]

如果您只是將您的char更改爲dchar,它將起作用。

您可能還需要從C風格的數組語法更改爲d風格:

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

你去那裏。

所以,我說:「它認爲」因爲這是一個有點爭議庫的決定。我認爲UTF-32並不是真正的可交換的原因,UTF-8不是 - 可以有配對的元素,改變它們的順序會破壞數據。但你不必爲像你這樣的簡單情況擔心。

+0

是的,'auto array = [「one」,「two」,「three」];'也可以。 – DejanLekic

相關問題