Delphi-Quellcode:
type
TForm1 =
class(TForm)
meAusg: TMemo;
edWort: TEdit;
btStart: TButton;
procedure btStartClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure tausche(
var s:
string;
const k:integer);
var
pu: Tstringlist;
i: integer;
c: char;
begin
pu := Tstringlist.Create;
//TcharList gibts nicht!
try
pu.Sorted := false;
for i := k
to length(s)
do
pu.Add(s[i]);
pu.Sort;
//Tausche mit dem kleinsten aus pu, das größer als s[k-1] ist
c := s[k-1];
for i := 0
to pu.Count -1
do
if c < pu[i][1]
then
Begin
s[k-1] := pu[i][1];
pu[i] := c;
//getauscht!
break;
End;
pu.Sort;
for i := k
to length(s)
do
s[i] := pu[i-k][1];
finally
pu.free
End;
end;
procedure naechstePermutation(
var s:
string);
var k:integer;
//z.B. s='12543' k=3
begin
k:= length(s);
while (k > 0)
and
(s[k] < s[k-1])
do
dec(k);
if k =1
then
s := '
'
else
Tausche(s,k);
end;
procedure TForm1.btStartClick(Sender: TObject);
var
s:
string;
zaehl: integer;
begin
s := edWort.Text;
meAusg.Lines.Clear;
zaehl := 0;
repeat
inc(zaehl);
meAusg.Lines.Add(s);
naechstePermutation(s);
until s = '
';
meAusg.Lines.Add('
———————');
meAusg.Lines.add('
Anzahl:'+intToStr(zaehl));
end;
damit klappts! aber achtung keine zeichen doppelt verwenden! dafür musst du das dann ein wenig umschreiben!