Заметка №1. Количество вхождений подстроки в строку.

05.05.2011
Хотя стандартной процедуры для нахождения количества вхождений подстроки в строку в Delphi нет, найти их будет несложно.

Теория


Это делается в одно действие, нам надо вычесть из общего количества символов в строке количество символов в изменённой строке без тех символов, которые мы считаем. Т.е. если из длины строки "Мама мыла раму" вычесть длину строки "Мамымылараму", то мы получим разницу в 2 символа (тут считали количество пробелов).

Практика


Ниже мы считаем количество пробелов в строке str
Length(str) - Length(StringReplace(str, ' ', '', [rfReplaceAll]))

Это вариант годен только тогда, когда считаем количество вхождений одного символа, а если ищём количество не одного символа а целой строки то в конце надо добавить деление на длину этой строки.
Length(str) - Length(StringReplace(str, substr, '', [rfReplaceAll]))  / Length(substr)

В виде функции:
function CountPos(str: stringsubstr: string;): Integer;

begin
Result := (Length(str) - Length(StringReplace(str, substr, '', [rfReplaceAll]))) / Length(substr);
end;