Помогите пожалуйста, объясните как это работает int q;void count(string s, string l){ int pos, k
= 0; while (s.find(l) != -1) { pos = s.find(l) + 1; k++; s = s.substr(pos); } q = k;}void Solve(){ Task("str41"); string s, l; pt >> s >> l; count(s, l); pt << q;}Ответы на вопрос
Объяснение:
Это весьма неэффективный алгоритм вычисления количества подстрок 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, завершаем цикл.
Приведенный код на языке программирования представляет собой функцию Solve(), которая содержит также функцию count(). Вот пошаговое объяснение того, как код работает:
- Объявление переменной
qс типом данныхint. - Объявление функции
count(), которая принимает две строки в качестве аргументов:sиl. - Внутри функции
count(), объявление переменныхposиkсо значениями 0. - В цикле
whileпроверяется, есть ли подстрокаlв строкеs. Функцияfind()используется для поиска первого вхождения подстрокиlв строкеs. Еслиfind()возвращает-1, это означает, что подстрока не найдена, и цикл завершается. - Если
find()не возвращает-1, значит, подстрока найдена, и выполняются следующие действия:- Переменная
posприсваивает значение индекса первого символа найденной подстроки в строкеs. - Переменная
kинкрементируется на единицу для подсчета количества найденных подстрок. - Строка
sобновляется, отсекая найденную подстроку и все символы перед ней с помощью функцииsubstr().
- Переменная
- По завершении цикла
while, переменнаяq(объявленная вне функцииcount()) присваивается значению переменнойk. - Функция
Solve()вызывается из другого места в программе. - В функции
Solve()выводится значение переменнойqс помощью оператора<<в некое место, обозначенноеpt.
В общем, данная программа выполняет подсчет количества вхождений строки l в строку s и сохраняет результат в переменной q. Затем значение q выводится на экран или записывается в файл, представленный оператором <<.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili
