Объяснение:
Это весьма неэффективный алгоритм вычисления количества подстрок l в строке s. Работает так:
1) Функция find ищет первое вхождение строки l в строку s: индекс начала вхождения pos. Например, s = "xxxabdcabd", l = "abd". Сделаем так:
int pos = s.find(l);
Первым вхождением строки l в строку s является выделенная часть: "xxxabdcabd". В переменной pos будет храниться индекс буквы a, то есть 3.
Если вхождения нет, то в pos будет находиться -1.
2) Если вхождение есть, то увеличиваем счетчик подстрок. Теперь нам нужно искать подстроку l в строке s, начиная с позиции pos+1. Для этого в коде исходная строка обрезается с помощью функции substr. Была "xxxabdcabd", стала "bdcabd".
Пример: s = s.substr(3+1);
Теперь в строке s удалены символы с индексами от 0 до 3 включительно.
Далее снова ищем первое вхождение строки l в уже новой строке s:
"bdcabd". Увеличиваем счетчик, снова обрезаем строку. Теперь s = "bd".
Снова попытаемся найти первое вхождение строки "abd" в уже строку "bd". Вхождения нет, s.find(l) == -1, завершаем цикл.