C++ tablica

Czy mógłby mi ktoś pomów dlaczego moja tablica się nie wyświetla?

cout<<"Podaj zaszyfrowany tekst (ciagiem bez spacji!): ";
char szyfr[150]; // tekst zaszyfrowany
gets(szyfr);
int l=strlen(szyfr); //dlugoszcz szyfru

showtablica();

cout<<"Deszyfruj tekst: ";

  for(z=0;z<l;z++) 
     {    
   
  	cout<<szyfr[z]; //pokazuje liczby tak jak wpisałem 
  	cout<<tablica[szyfr[z]][ szyfr[z+1]]<<" "; 	 // nic nie wypisuje 
  	z=z+1; 
  	}

Może błąd na etapie liczby “maksymalnej” znaków?

http://cpp0x.pl/kursy/Kurs-C++/Tablice-zmiennych/298

I dodatkowo ona chce być wyświetlana jako dwuwymiarowa, może jeszcze spacja po nawiasie a przed słowem szyfr?

Długość jest ok a spacja nic nie pomogła… deklaracja tablicy: char tablica[5][5];

Z pewnością jest problem że pod elementy tablicy chce podstawić nie liczbę np. tablica [1][1] ale zamiast jedynki jest char czyli znak ale już próbowałem konwersji i coś mi nie idzie :frowning:

Daj cały program bo inaczej to nie ma sensu . Nie mam pojęcia co się w nim dzieje więc nie ma pojęcia co znajduje się pod szyfr od z albo szyfr od z+1. Ogólnie nie wiem co jest w tej tablicy ,potrzebuję całego kodu a najbardziej co się dzieje z tablica.

Dobra teraz to zauważyłem

tablica[szyfr[z]]

Zastanów się czym jest szyfr[z]

1 polubienie

kod jest dość długi ale reszta jest poprawna… w tablica[5][5] jest alfabet i tyle. Chodzi o to że po wpisaniu z palca na wejściu liczb np. 11121315 (oczywiście w parzystej kombinacji)
to mam mieć wyświetlone pozycje z tablicy pod tablica[1][1], tablica[1][2], tablica[1][3] itp.

Najważniejsze pytanie

tablica[szyfr[z]]

co jest w szyfr[z], pytam nie dlatego ,że nie wiem a dlatego ,że jest tam bzudra

1 polubienie

Tam jest char widziałeś kiedyś zwykłą tablicę indeksowaną charami?

No tak wiem w czym problem… powinno być int ale na kilka sposobów próbowałem konwertować np.
sscanf

atoi

(int)©

i nic

Jest parę opcji. Najprostsza to:

cout << tablica[szyfr[z]-'0'][szyfr[z + 1]-'0'] << " ";

Albo jeśli chcesz mieć inta

int temop = (int)szyfr[z]-'0';

Możesz też po prostu odjąć 48 zamiast ‘0’.

Rozumiesz dlaczego tak?

Bardzo Ci dziękuję za pomoc.
Jeszcze do końca tego nie rozumiem ale zaraz doczytam.
Jeszcze raz wielkie dzięki za poświęcony czas.

Poczytaj czym jest kodowanie znaków. Najpopularniejsze jest ASCII i zobacz jaką wartość ma w tym kodowaniu np.1

Musisz zrobić rzutowanie z char na inta. Char ‘1’ w ascii ma wartość dziesiętną równa 48, a nie 1 jak potrzebujesz.

Następnym razem daj więcej kodu niż jakieś ścinki bo miałem odpuścić temat, ale w ostatniej chwili kapnąłem się jakie szyfrowanie implementujesz.

Char ‘1’ w ascii ma wartość 49 a nie 48. Ale najczytelniej moim zdaniem jest odejmować ‘0’.