Объясните как работает алгоритм с++

106
01 декабря 2020, 20:00

Как работает этот алгоритм, в особенности интересует 13,15,16,18 строки. Конечно ясно что он выводит номер последнего вхождения подстроки и количество таких вхождений. Но как он их обрабатывает? Что это за магический код? Уже второй день ищу как работают эти функции, но объяснение приведено для профессионалов.

#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
string stroke = "";
string substroke= "";
cin >> stroke;
cin >> substroke;
int j = 0; // позиция
size_t k = 0;
for (string::size_type i = 0; i < stroke.length(); ++i) {
    j = j + 1;          // номер позиции последнего вхождения
    if (stroke[i] == substroke[0]) {
        if (stroke.substr(i, substroke.length()) == substroke)      {
            k = k + 1;                              // кол-во вхождений
            i += substroke.length() - 1;
        }
    }
}
cout << j << endl;
cout << k;
return 0;
}
Answer 1

Алгоритм идет из начала в конец исследуемой строки (условие цикла), пока не появится первая буква искомой подстроки (stroke[i] == substroke[0]). Как только появилась - с этого места (i) надеется найти слово (stroke.substr(i, substroke.length()) == substroke), если находится - увеличивает счетчики и передвигается на его конец, откуда снова ищет первую букву..., иначе итерируется дальше в поисках буквы.

READ ALSO
Не полное выделение памяти с++ malloc

Не полное выделение памяти с++ malloc

От чего у меня выделяется память только для одного элемента?

132
Как убрать пробел после последней цифры, при построении числовой пирамиды?

Как убрать пробел после последней цифры, при построении числовой пирамиды?

Написал код для создания числовой пирамиды на N строк, где в каждой строке нумерация идет от 1 до N строки через пробелВсе компилируется и работает,...

113
Запрет на закрытие программы

Запрет на закрытие программы

Нужно запретить пользователю выходить из программы "крестиком"

129
Visual Studio C++ не подсвечивает ошибки

Visual Studio C++ не подсвечивает ошибки

Я не знаю баг это или фича, но Visual Studio C++ (VS 141) не подсвечивает ошибки если функция использует шаблонные параметры, да и вообще работает с шаблонном

144