Autor Beitrag
Der Michel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Mo 24.03.03 14:02 
Hallo,

ich weiß, die Überschrift mag ein wenig verwirrend sein, aber es geht um folgendes:
Angenommen ich habe den String 'ABCD', und ich möchte nun herausfinden welche Strings ich bekomme wenn ich jedes 'B' durch ein 'C' ersetze und umgekehrt.
In diesem Fall sollte also rauskommen:
ABBD, ABCD, ACBD und ACCD.

Hat jemand zufällig einen Algorithmus für so etwas parat, oder weiß jemand wo so etwas beschrieben steht?

Gruß,
Michel
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mo 24.03.03 18:42 
Hi,

so sollte es gehen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
function Replace(S, Old, New: String): TStringList;
var
  i: Integer;
  T: String;
begin
  Result:=TStringList.Create;

  T:=StringReplace(S,New,'(Old)',[rfReplaceAll,rfIgnoreCase]);
  T:=StringReplace(T,'(Old)',Old,[rfReplaceAll,rfIgnoreCase]);
  Result.Add(T);

  T:=StringReplace(S,Old,'(New)',[rfReplaceAll,rfIgnoreCase]);
  T:=StringReplace(T,New,'(Old)',[rfReplaceAll,rfIgnoreCase]);
  T:=StringReplace(T,'(New)',New,[rfReplaceAll,rfIgnoreCase]);
  T:=StringReplace(T,'(Old)',Old,[rfReplaceAll,rfIgnoreCase]);
  Result.Add(T);

  T:=StringReplace(T,Old,'(New)',[rfReplaceAll,rfIgnoreCase]);
  T:=StringReplace(T,New,'(Old)',[rfReplaceAll,rfIgnoreCase]);
  T:=StringReplace(T,'(New)',New,[rfReplaceAll,rfIgnoreCase]);
  T:=StringReplace(T,'(Old)',Old,[rfReplaceAll,rfIgnoreCase]);
  Result.Add(T);

  T:=StringReplace(S,Old,'(New)',[rfReplaceAll,rfIgnoreCase]);
  T:=StringReplace(T,'(New)',New,[rfReplaceAll,rfIgnoreCase]);
  Result.Add(T);
end;


Aufrufen tust du das ganze dann so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var
  t: TStringList;
begin
  t:=TStringList.Create;
  t:=Replace('ABCD','B','C');
  Memo1.Lines.Assign(t);
  t.Free;
end;


Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 24.03.03 19:07 
Hallo Aya, was der code jetzt genau macht, hav ich mir nicht angeguggt.
Aber mit deinem Code schaffst du dir aber ein Speicherloch, da du 2xstringlist.create hast, diese aber nur 1xfreigibst. Besser wäre vielleicht, die Stringlist als Var-Parameter zu übergeben.
Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Der Michel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Di 25.03.03 09:55 
Hallo,

mit dem String 'ABCD' funktioniert es wunderbar. :-)
Mit längeren oder kürzeren Strings ('ABD' oder 'ABBCD') aber leider nicht, es werden ja immer 4 Sachen ausgegeben. Aber erstmal danke für den Ansatz.

Gruß,

Michel