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] <> #0) and (P2[0] <> #0) do begin while (P1[0] in Satzzeichen) do Inc(P1); while (P2[0] in Satzzeichen) do Inc(P2); if P1[0] <> P2[0] then 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!