Czy jest jakiś szybki sposób na wyszukanie danej litery w dwuwymiarowej tablicy charów?
0
0
Zakładam ,że wypełnisz tablicę jakimiś sensownymi wartościami.
Można to rozwiązać mniej więcej tak:
char tab[20][20];
char * szukany = std::find(tab[0], tab[0] + 400, 'a');
++szukany;
// *szukany - tutaj się znajduje znaleziony znak
1
Sposób @robcio zadziała tylko, jeśli tablica jest jednym blokiem pamięci – działanie będzie błędne dla tablicy utworzonej dynamicznie. Poza tym jeśli znak nie zostanie odnaleziony to będzie czytanie poza zakresem tablicy. Ponadto iteracja do tab[0]+40
to o wiele za mało, bo w jego przykładzie tablica ma 400 elementów, a nie 40, ale powiedzmy, że to literówka.
Najprostszym rozwiązaniem będzie po prostu podwójna pętla:
std::pair<int, int> find2d(char** tab, int rows, int cols, char c) {
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
if (tab[i][j] == c)
return std::make_pair(i, j);
return std::make_pair(-1, -1);
}
Funkcja zwraca parę współrzędnych (x, y) na których znajduje się poszukiwany znak, bądź parę (-1, -1) jeśli znak nie występuje w tablicy.