Как работает код, не могу разобраться

```

include <stdio.h>

#include <string.h>
#include <math.h>
#include <iostream>
#include<string>
using namespace std;

#define tonum(c) (c >= 'A' && c <= 'Z' ? c - 'A' : c - 'a' + 26)


int mod(int a, int p, int m)
{
    if (p == 0)
        return 1;
    int sqr = mod(a, p / 2, m) % m;

    if (p & 1)
        return ((a % m) * sqr) % m;
    else
        return sqr;
}

int RabinKarpMatch(char* T, char* P, int d, int q)
{
    int i, j, p, t, n, m, h, found;
    n = strlen(T);
    m = strlen(P);
    h = mod(d, m - 1, q);
    p = t = 0;

    for (i = 0; i < m; i++)
    {
        p = (d * p + tonum(P[i])) % q;
        t = (d * t + tonum(T[i])) % q;
    }

    for (i = 0; i <= n; i++)
    {
        if (p == t)
        {
            found = 1;
            for (j = 0; j < m; j++)
                if (P[j] != T[i + j])
                {
                    found = 0;
                    break;
                }
            if (found)
                return i + 1;
        }
        else
        {
            t = (d * (t - ((tonum(T[i]) * h) % q)) + tonum(T[i + m])) % q;
        }
    }
    return -1;
}

int main(int argc, char* argv[])
{
    int sovp;
    int d = 1, q = 1000;
    char T[200];
    char P[100];
    string t;
    string p;
    cout << "Vvedite text" << endl;
    getline(cin, t);
    strcpy_s(T, t.c_str());
    cout << "Vvedite stroku" << endl;
    getline(cin, p);
    strcpy_s(P, p.c_str());

    sovp = RabinKarpMatch(T, P, d, q);
    if (sovp)
        cout << "Slovo naideno v " << sovp << " posizii";
    else
        cout << "Sovpadenii ne naideno!!!";
    system("pause");
    return 0;
}```

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.