Автор - 10101011881910119

помогите пожалуйста, объясните как это работает

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;
}​

Ответ

Автор - iknowthatyoufeelbro

Объяснение:

Это весьма неэффективный алгоритм вычисления количества подстрок 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, завершаем цикл.

Ответы и объяснения

Сервис носит ознакомительный характер, вся информация, а в частности вопросы и ответы, которые задают и отвечают пользователи.
© 2026 Все права защищены Политика конфиденциальности Контакты
search points attachment profile arrow left arrow right star heart verified symbols equation arrow-down question mark check menu accountancyadministrationagriculturalalgebraallarabicartart_musicbelarusbelarus_altbiologybusinesscatalachemistrychineseeconomicsegzamenglishentrepreneurshipenvironmentethicseuskarafirst_aidfrenchgalegogeographygeologygeometrygermangrammarhealthhistoryindia_langindonesian_langinformaticsitalianjapanesekazachkazach_altkoreanlanguagelatinlawlife_scienceliteraturelogicmathematicsmusicnigerian_langother_languagesotherspedagogicsphilosophyphysical_educationphysicspoliticspsychologyreligionrpa_langrussianrussian_altsciencesecurityskillssocial_sciencesociologyspanishstatisticstechnologytourismtrafficukrainianukrainian_altukrainian_literaturewos_civilisation accountancyadministrationagriculturalalgebraall_1arabicartart_music_2belarusbelarus_altbiologybusiness_2catalachemistry_1chineseeconomicsexam_3englishentrepreneurshipenvironment_2ethicseuskarasecurity_1frenchgalegogeography_4geology_4geometrygermangrammarhealthhistoryindia-langindonesian-langinformaticsitalianjapanesekazachAsset 230koreanlanguagelatinlawlife-scienceliteraturelogic_2mathematicsmusicnigerian-langotherlanguagesother_1pedagogicsphilosophyphysical_educationphysicspoliticspsychologyreligion_1rpa-langrussianrussian_altsciencesecurity_3_mskills_1allsocial_science_5_msociologyspanishstatisticstechnologytourismtrafficukrainianukrainian_altukrainian_literaturewos_civilisation