C++ Wyszukanie słowa w tablicy dwuwymiarowej.
Ostatnio zmodyfikowano 2014-12-01 22:43
Beast667 Temat założony przez niniejszego użytkownika |
C++ Wyszukanie słowa w tablicy dwuwymiarowej. » 2014-11-27 20:13:18 Witam,
Próbuję napisać pseudo grę - wykreślanie słów z tablicy dwuwymiarowej . Tablica jest wprowadzana na sztywno (tylko małe litery) z ukrytym słowem, po czym użytkownik wprowadza słowa. Jeśli zostanie znalezione litery w tab zamieniają się na wielkie .
I mam problem z przeszukaniem tej tab. 2-wymiarowej. Dodam, że słowo wprowadzone przez użytkownika przechowywane jest w jednowymiarowej tablicy znaków. Proszę o jakąś podpowiedź. |
|
Tomek_z_W11 |
» 2014-11-27 23:04:39 Domyślam się, że słowo przechowywane w tablicy dwuwymiarowej (to które ma się zamienić na wielkie litery) jest w jednym z wierszy? Jeżeli tak, to robisz dwie pętle, jedna w drugiej, i sprawdzasz kolejne komórki każdego wierszu, mniej więcej wyglądałoby to tak: int i, j;
for( i = 0; i < rozmiar_tablicy_dwuwymiarowej( pierwszy wymiar ); i++ ) { for( j = 0; j < rozmiar_tablicy_dwuwymiarowej( drugi wymiar ); j++ ) { if( tablica_dwuwymiarowa[ i ][ j ] == tablica_jednowymiarowa[ j ] ) { licznik++; } if( licznik == rozmiar_tablicy_jednowymiarowej ) { while( licznik > 0 ) { tablica_dwuwymiarowa[ i ][ j ] -= 32; j--; } } } licznik = 0; }
w tym poście mogą być drobne nieścisłości, chociażby w petli while( licznik > 0 ) Może się okazać, że potrzeba zamienić na while( licznik >= 0 ) musisz to przemyśleć, przetestować... |
|
Beast667 Temat założony przez niniejszego użytkownika |
» 2014-12-01 21:21:58 ma przeszukiwac w pionie, poziomie i na ukos |
|
Tomek_z_W11 |
» 2014-12-01 22:43:54 Mam pomysł na pewien algorytm, który będzie STRASZNIE niezoptymalizowany, tzn, zrobić 3 pętle, jedna do wyszukiwania słów w poziomie - kod już napisałem w poprzednim poście, druga do słów w pionie, trzecia do słów na ukos. Druga pętla wyglądała by mniej więcej tak: for( i = 0; i < rozmiar_tablicy_dwuwymiarowej( pierwszy wymiar ); i++ ) { for( j = 0; j < rozmiar_tablicy_dwuwymiarowej( drugi wymiar ); j++ ) { if( tablica_dwuwymiarowa[ j ][ i ] == tablica_jednowymiarowa[ j ] ) { licznik++; } if( licznik == rozmiar_tablicy_jednowymiarowej ) { while( licznik > 0 ) { tablica_dwuwymiarowa[ i ][ j ] -= 32; j--; } } } licznik = 0; }
Trzecia pętla: for( i = 0; i < rozmiar_tablicy_dwuwymiarowej( pierwszy wymiar ); i++ ) { for( j = i; j < rozmiar_tablicy_dwuwymiarowej( drugi wymiar ); j++ ) { if( tablica_dwuwymiarowa[ j ][ j ] == tablica_jednowymiarowa[ j ] ) { licznik++; } if( licznik == rozmiar_tablicy_jednowymiarowej ) { while( licznik > 0 ) { tablica_dwuwymiarowa[ i ][ j ] -= 32; j--; } } } licznik = 0; }
Uprzedzam, że tego nie sprawdzałem, oraz, że pętla trzecia sprawdzi tylko "górną połowę", innymi słowy sprawdzi na ukos, ale tylko te słowa z prawego górnego rogu. |
|
« 1 » |