- Код: Выделить всё
function CompareStrings(S1, S2: string; MatchCount: integer): Integer;
var i, j, Count_, Count: integer;
function Flag:Boolean;
begin
Result := false;
if (i + Count_ <= Length(S1)) and (j + Count_ <= Length(S2)) then
if S1[i+Count_] = S2[j+Count_] then
Result:= true;
end;
begin
Result := -1;
Count := 0;
S1 := AnsiLowerCase(S1);
S2 := AnsiLowerCase(S2);
S1 := StringReplace(S1, ' ', '', [rfIgnoreCase, rfReplaceAll]);
S2 := StringReplace(S2, ' ', '', [rfIgnoreCase, rfReplaceAll]);
S1 := StringReplace(S1, ''#13#10'', '', [rfIgnoreCase, rfReplaceAll]);
S2 := StringReplace(S2, ''#13#10'', '', [rfIgnoreCase, rfReplaceAll]);
if (MatchCount = 0) or (Length(S1) = 0) or (Length(S2) = 0) then
Exit;
i := 1;
repeat
j := 1;
repeat
if S1[i] = S2[j] then
begin
Count_ := 1;
while flag do
Inc(Count_);
i := i + Count_ - 1;
j := j + Count_ - 1;
if Count_ >= MatchCount then
Count := Count + Count_;
end;
Inc(j)
until j >= Length(S2);
Inc(i)
until i >= Length(S1);
if Length(S1) < Length(S2) then
Count_:= Length(S1)
else
Count_:= Length(S2);
Result := Count;
end;
использовать:
- Код: Выделить всё
var
Find: integer;
begin
Find := CompareStrings('оригинальный текст','текст для поиска', 3);//3 - количество слов сравнения
ShowMessage(IntToStr(Find));
end;
Проблема заключается в том, что данная функция в Delphi 7 дает один результат - близкий к реальному, а в Lazarus совершенно другой и зачастую на несколько порядков отличающийся. Кто подскажет где собака зарыта?