Entwickler-Ecke

Sonstiges (Delphi) - Strings vergleichen


phombaa - Sa 14.06.03 16:28
Titel: Strings vergleichen
BEGIN Frage:

1. Ich möchte 2 Strings (s1 und s2) unter bestimmten
Bedingungen vergleichen.
2. Dazu suche ich eine Funktion (f1), welche True zurückgibt, wenn
a) s1 = s2
oder
b) s1 = s2 ist, wobei alle Satzzeichen {.,?;} ignoriert werden sollen.
Wäre z.B
s1 = 'abc, def?'
und
s2 = 'abc def';
würde f1(s1,s2) = True zurückgeben.
3. Wie kann man so was realisieren?

END Frage.

thx4antworten


Brueggendiek - Sa 14.06.03 16:36

Hallo!

1. Man kann Stings direkt vergleichen!

Delphi-Quelltext
1:
2:
3:
4:
5:
if s1 = s2 then
begin
  tuwasbeigleich;
  tunochwasbeigleich;
end;
funzt prima. Ggf. noch mit Trim arbeiten, um Leerzeichen am Ende zu entfernen.

2. Strings ggf. in Zwischenwerte kopieren und alles Unerwünschte (Satzzeichen, mehrfache Leerzeichen etc.) mit StringReplace entfernen, dann vergleichen wie oben.

Alles weitere siehe F1!

Gruß

Dietmar Brüggendiek


AndyB - Sa 14.06.03 17:55

Brueggendiek hat folgendes geschrieben:
(Satzzeichen, mehrfache Leerzeichen etc.) mit StringReplace entfernen

Viel Spaß bei den vielen StringReplace aufrufen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
const
  Satzzeichen = ['.'','';'':''"''''''('')''?''!'];

function f(const S1, S2: string): Boolean;
var
  P1, P2: PChar;
begin
  Result := False;
  P1 := PChar(S1);
  P2 := PChar(S2);
  while (P1[0] <> #0and (P2[0] <> #0do
  begin
    while (P1[0in Satzzeichen) do Inc(P1);
    while (P2[0in Satzzeichen) do Inc(P2);
    if P1[0] <> P2[0then Exit;
    if P1[0] <> #0 then Inc(P1);
    if P2[0] <> #0 then Inc(P2);
  end;
  Result := True;
end;


Popov - Sa 14.06.03 18:17

Ansonsten sollte man hin und wieder das oft vergessene CompareStr und CompareText nutzen. Im Gegensatz zum direkten Vergleich bekommt man bei der Funktion auch größer/kleiner/gleich Ergebnisse. Der Unterschied zwischen CompareStr und CompareText ist, daß bei CompareText die Groß-/Kleinschreibung ignoriert wird.

Somit ist

if UpperCase(S1) = UpperCase(S2) then ...

vergleichbar mit

if CompareText(S1, S2) = 0 then ...

Alternativ gibt es noch AnsiCompareStr und AnsiCompareText,


AndyB - Sa 14.06.03 18:25

Nur dass dabei auch die Satzzeichen mitverglichen werden.


Popov - Sa 14.06.03 18:31

Ja, ich hab mir dein Beispiel nicht genau angeguckt. Ich dachte, daß deine Funktion nur die Zeichen entfernt.