Błąd w szyfrze cezara

0

Witam,
napisałem coś co miało być szyfrem Cezara. Po szyfrowaniu wyświetlana jest tylko pierwsza litera niestety. Pomoże ktoś?

<?php
			$show = true;
			
				$x = ($_POST['key']);
				$key = $x;//%26;
				//if($x < 0) $key *= -1;
				$mes = ($_POST['mes']);
				$let;
				$answer;
				for($i = 0; $i < count($mes); $i++)
				{
					$let = $mes[$i];
					
					
					if(ord($let) >64 && 91 > ord($let))
					{
						if(ord($let) + $key < 65)
						{
							$answer[$i] = chr(ord($let) + $key + 26);
						}else
						if(ord($let) + $key > 90)
						{
							$answer[$i] = chr(ord($let) + $key - 26);
						}else
						{
							$answer[$i] = chr(ord($let) + $key);
						}
					}else  //===>>
					if(ord($let) > 96 && 123 > ord($let))
					{
						if(ord($let) + $key < 97)
						{
							$answer[$i] = chr(ord($let) + $key + 26);
						}else
						if(ord($let) + $key > 122)
						{
							$answer[$i] = chr(ord($let) + $key - 26);
						}else
						{
							$answer[$i] = chr(ord($let) + $key);
						}
					}
					else{
						echo "<h1>Oooops! Error!</h1><br /><p>Sorry, script doesn't work, because You gave me some bad signs!</p>";
						$show = false;
					}
				}
				if($show){
				echo "<h1>Message:</h1><p>";
				for($x = 0; $x < count($answer); $x++)
					echo $answer[$x];
				echo "!!!</p>";}
				
			?>
0

spróbuj:
$answer=array();

zamiast:
$answer;

0

niestety nic. Bez, lub z argumentem.

0

Spróbuj:

  • wyświetl sobie: $x i $mes przed całą pętlą (dla pewnosci ze w ogole przekazujesz jakiekolwiek parametry)
  • w petli przepisz wejscie na wyjscie ($answer[$i] = $mes[$i];) - jeśli to Ci zadziała to masz błąd w środku pętli, jeśli nie to poza nią.

Kod powinien wygladac cos w ten desen:
x - kod ascii litery
(pseudo kod)

if (x >= kod_ascii_A && x <= kod_ascii_Z)
{
  offset = x - kod_ascii_A;
  offset = (offset + key) % 26; // 26 = kod_ascii_Z - kod_ascii_A + 1
  y = kod_ascii_A + offset; // litera wyjsciowa
}
// to samo dla malych liter
0

parametry są. Wg. twojego toku myślenia błąd jest poza pętlą.

$answer[$i] = $mes[$i]; 

i dalej wyświetla pierwszą literę. Wygląda to tak jakby pętla wykonywała się tylko raz.

0

To wiesz gdzie szukac bledu, komentuj kod tak dlugo az zadziala Ci cos prostego, jak sie poddasz to poczytaj jak sie w PHP modyfikuje stringi.

Np.:
$answer = $mes; $answer[2] = '#';

Sprawdz sobie tez jaki jest typ danych Twojego wyjscia, bo mam przeczucie ze to niekoniecznie musi byc zwykla tablica, a moze byc tablica asocjacyjna, wtedy uzyj: http://php.net/manual/en/function.array-values.php, a jeszcze lepiej po prostu uzyj string

1

Zamień

for($i = 0; $i < count($mes); $i++)

na

for($i = 0; $i < strlen($mes); $i++) 

1 użytkowników online, w tym zalogowanych: 0, gości: 1