Jak szybko wyszukac element w tablic dwuwymiarowej

0

Czy jest jakiś szybki sposób na wyszukanie danej litery w dwuwymiarowej tablicy charów?

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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.