- Код: Выделить всё
- 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 совершенно другой и зачастую на несколько порядков отличающийся. Кто подскажет где собака зарыта?





