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)