basic.cpp

basic.cpp
#include <iostream>
#include <string>
#include <cstdlib>
#include <time.h>

const int T = 60;
const int P = 3;

using namespace std;

string text()
{
    string t = "";
    for (int i = 0; i < T; i++)
        t += char('A' + (rand() % 3));

    return t;
}

string pattern()
{
    string p = "";
    for (int i = 0; i < P; i++)
        p += char('A' + (rand() % 3));

    return p;
}

int wyszukiwanie_naiwne(string t, string p)
{
    int counter = 0;
    for (int i = 0; i <= T - P; i++)
    {
        if (p == t.substr(i, 3))
        {
            cout << "^";
            counter++;
        }
        else
            cout << " ";
    }
    cout << endl;
    return counter;
}

int PrefSuf(string t)
{
    int PI[T + 1], x;
    PI[0] = x = -1;
    for (int i = 1; i <= T; i++)
    {
        while ((x > -1) && (t[x] != t[i - 1]))
            x = PI[x];
        PI[i] = x;
        x++;
    }
    return x;
}

int main()
{
    srand((unsigned)time(NULL));

    string t = text();
    string p = pattern();

    cout << p << endl;
    cout << t << endl;

    cout << "Ilosc powtorzen wzorca w tekscie:  " << wyszukiwanie_naiwne(t, p) << endl;

    cout << "Najdluzszy Prefikso-Sufiks:  " << PrefSuf(t) << " | " << t.substr(0, PrefSuf(t)) << endl;

    return 0;
}