2016-11-02 8 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

だからだけではなく、int型と互換性があり、それはフォボスは、「双方向」と「スワップ可能」と考えるものである - それは簡単に逆転させ、個々の要素を入れ替えることができ、アレイ、 UTF-8エンコーディングのためにプレーンストリングがスワップ不可能であるとみなします。可変長要素のエンコーディングのために、2つの文字をスワップするには、配列全体を再シャッフルする必要があります。これは、関数よりもはるかに高価です。

したがって、この作業を行う最も簡単な方法は、Phobosが交換可能と考えるタイプ、UTF-32文字列、別名dchar[]を使用することです。

chardcharに変更するだけで動作します。

また、DスタイルにCスタイルから、あなたの配列構文を変更する場合がありますがあり

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

あなたが行きます。

だから、これは議論の余地のあるライブラリの決定であると私は考えています。私は、UTF-32は、UTF-8がそうでないのと同様の理由で実際には交換できないと主張します。ペアの要素があり、順序を変更するとデータが破損する可能性があります。しかし、あなたのような単純なケースでは、それについて心配する必要はありません。

+0

自動配列= ["one"、 "two"、 "three"]; 'も動作します。 – DejanLekic

関連する問題