Hallo,
deinen Code habe ich mir erstmal anders hingeschrieben:
Delphi-Quellcode:
function MatchStr(Source, Pattern: string; CaseSensitive: Boolean = True): Boolean;
function Match(Source, Pattern: PChar): Boolean;
begin
if StrComp(Pattern, '*') = 0 then Result := true else
if (Source^ = Chr(0)) and (Pattern^ <> Chr(0)) then Result := false else
if Source^ = Chr(0) then {Result := true} Exit else
case Pattern^ of
'*': Result := Match(Source, @Pattern[1]) or Match(@Source[1], Pattern);
'?': Result := Match(@Source[1], @Pattern[1]);
else Result := (Source^ = Pattern^) and Match(@Source[1], @Pattern[1]);
end;
end;
begin
if not CaseSensitive then
begin
Source := AnsiLowerCase(Source);
Pattern := AnsiLowerCase(Pattern);
end;
Result := Match(PChar(Source), PChar(Pattern))
end;
Bei langen Strings ist die Rekursion keine ökonomische Lösung.
Ich habe dir zusätzlich eine kleine Änderung eingebaut: Wenn du am Ende des Source-Strings angekommen bist, darfst du das Ergebnis nicht unbedingt auf FALSE setzen.
Grüße vom marabu