Algorytm szukający tablicy dwuwymiarowej w drugiej tablicy dwuwymiarowej


(adrian.lodz) #1

Witam.

Piszę w C++ na Qt Creator 4.1.0, bazującym na Qt 5.7.0 (GCC 4.9.1 20140922(Red Hat 4.9.1-10), 64 bitowy).

System to Linux Mate 16.04.

Nie wiem jak napisać algorytm, który szuka tablicy dwuwymiarowej w drugiej tablicy dwuwymiarowej.

Potrzebuję takiego algorytmu do zadania ze strony: Pieczątki

Nie wybieram się na olimpiadę.

Po prostu ćwiczę na tych zadaniach, aczkolwiek nie mogę wymyślić odpowiedniego algorytmu do tego zadania.

Pierwsze dane czyli to co ma być na kartce zapisałem do tablicy dwuwymiarowej a dokładniej do kontenera

vector<string> Kartka

 Jeden string - jedna linia.

Później utworzyłem drugą tablicę dwuwymiarową, którą wstawiłem do kontenera vectora, gdyż może być wiele pieczątek. Wyszedł mi z tego

vector<vector<string>> Pieczatki

I tu zaczynają się schody.

Jak przeszukiwać większą tablicę , żeby znaleźć mniejszą?

Chciałem najpierw szukać pierwszej pieczątki w całej tablicy o nazwie Kartka, później drugiej, trzeciej itd.

Po znalezieniu poszukiwanej pieczątki, na kartce chciałem znaki z pieczątki pozamieniać przykładowo na znak “@”.

Ale jak próbowałem tak zrobić to na koniec miałem całą kartkę w znakach “@”.

Pisałem, kombinowałem, i kasowałem. Jestem w kropce.

Jak to mam napisać?

Poniżej funkcja do zadania.

To co mi zostało to pobieranie danych, a

void pieczatki()

{

    vector<string> Kartka;

    string linijkaTekstu;

    uint W,S;

    cout<<"Podaj W: ";

    cin >>W;//ile wierszy ma kartka

    cout<<"Podaj S: ";

    cin >>S;//ile kolumn ma pojedynczy wiersz kartki

    for(uint i=0;i<W;i++)

    {

        Kartka.push_back(getline(linijkaTekstu,S));//wstawienie wiersza do vectora Kartka

    }

    uint P;

    do

    {

        cout<<"Podaj P: ";

        cin>>P;//liczba dostępnych pieczątek

    }

    while(P<1||P>20);

    uint R,C;

    vector<vector<string>> Pieczatki;

    vector<string>wierszePieczatki;

    for(uint i=0;i<P;i++)

    {

        cout<<"Podaj R: ";cin>>R;//ile wierszy ma pieczątka

        cout<<"Podaj C: ";cin>>C;//ile kolumn ma pojedynczy wiersz pieczątki

        for(uint i=0;i<R;i++)

        {

            wierszePieczatki.push_back(getline(linijkaTekstu,C));//wstawienie wiersza do vectora wierszePieczatki

        }

        Pieczatki.push_back(wierszePieczatki);//wstawienie nowej pieczątki do vectora pieczątek

        wierszePieczatki.clear();

    }

    for(uint i=0;i<Pieczatki.size();i++)

    {

        //tu powinno być przeszukiwanie Kartki w celu znalezienia pieczątki o indeksie i

    }

}

Poniższą funkcję napisałem osobno, łącząc funkcję getline i substr.

Tak mi wygodniej.

Jakby ktoś się czepiał że nie ma takiej funkcji.

getline(linijkaTekstu,C)