function CountPos(const subtext: string; Text: string): Integer;
beginif (Length(subtext) = 0) or (Length(Text) = 0) or (Pos(subtext, Text) = 0) then
Result := 0
else
Result := (Length(Text) - Length(StringReplace(Text, subtext, '', [rfReplaceAll]))) div
Length(subtext);
end;
Here is a translation of the content into Russian:
Функция Delphi, называемая CountPos, принимает два параметра типа строка: subtext и Text. Она возвращает количество вхождений subtext в Text.
Рассмотрим, как функция работает:
Функция сначала проверяет, является ли ни один из параметров subtext, Text или оба пустыми строками (Length(subtext) = 0 или Length(Text) = 0). Если это так, она возвращает 0.
Затем функция использует функцию Pos для поиска позиции первого вхождения subtext в Text. Если не было найдено ни одного вхождения (Pos(subtext, Text) = 0), она возвращает 0.
В противном случае функция рассчитывает количество вхождений, вычитая длину модифицированной строки (полученной путем замены всех вхождений subtext на пустую строку с помощью StringReplace) из длины Text, а затем делив результат на длину subtext.
Пример использования:
var
Text: string;
subtext: string;
begin
Text := 'Hello, Hello, World!';
subtext := 'Hello';
Result := CountPos(subtext, Text); // Возвращает 2
end.
В этом примере функция возвращает 2, потому что subtext'Hello' встречается дважды в Text'Hello, Hello, World!'.
Альтернативное решение может быть использование регулярного выражения для поиска всех вхождений подстроки и затем счета их. Это подход может быть более эффективным для больших строк или сложных шаблонов. Вот пример использования built-in поддержки регулярных выражений Delphi:
function CountPos(const subtext: string; Text: string): Integer;
var
Matches: TMatchArray;
begin
if Length(subtext) = 0 or Length(Text) = 0 then
Result := 0
else begin
Result := 0;
Matches := FindAllMatches(Text, PWideChar(subtext));
for i := 0 to Pred(Matches.Count) do
Inc(Result);
end;
end;
Функция использует функцию FindAllMatches из библиотеки регулярных выражений Delphi для поиска всех вхождений подстроки в тексте. Затем она счет количество вхождений и возвращает результат.
В статье рассмотрен алгоритм нахождения количества вхождений подстроки в строку с помощью функции CountPos, реализованной на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS