ďťż
Podstrony
|
telcocafeWitamPróbuję napisać prosty skrypt szyfrujący (zamienia podaną literę na następną. Np. podaję "g", a zamieni na "h") if (isset($_GET['szy']) && !isset($_GET['od'])) { $zamien = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $na = array( 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a' ); $ciag = strtolower($_GET['pole']); $zamienione = str_replace($zamien, $na, $ciag); echo("Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione</b></font>"); } else { $na2 = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $zamien2 = array( 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a' ); $ciag2 = strtolower($_GET['pole']); $zamienione2 = str_replace($zamien2, $na2, $ciag2); echo("Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione2</b></font>"); } Co tu może być źle? Jak wpisze np. "Ekspert" i nacisnę na zaszyfruj to wywala mi "aaaaaa". Jak dam "ekspert" i nacisnę na odszyfruj to wywala mi "djrodqs". (Jak dam "abcde" i nacisnę "odszyfruj" to wywala mi zzbcd. Powinno być "zabcd")Dlaczego nie działa zgodnie z moim zamierzeniem? Co zrobiłem nie tak? Użytkownik sauron edytował ten post 12 październik 2007, 15:54 Działający kod: <?php if (isset($_GET['szy']) && !isset($_GET['od'])){ $zamien = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $na = array( 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a' ); $ciag = strtolower($_GET['pole']); $array = str_split($ciag); foreach ($array as $znak){ $juz = false; foreach ($zamien as $id => $litera){ if ($znak == $litera & !$juz){ $zamienione .= str_replace($zamien[$id], $na[$id], $znak); $juz = true; } } } echo "Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione</b></font>"; }else{ $zamien = array( 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a' ); $na = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $ciag = strtolower($_GET['pole']); $array = str_split($ciag); foreach ($array as $znak){ $juz = false; foreach ($zamien as $id => $litera){ if ($znak == $litera & !$juz){ $zamienione .= str_replace($zamien[$id], $na[$id], $znak); $juz = true; } } } echo "Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione</b></font>"; } ?> Wydaje mi się, ze str_replace zadziałało jak pętla i a=>b, a później b=>a, ..., aż do z=>a - dlatego zawsze zwracało aaaaa. Ok thx. Zastanawiałem się też nad odwróceniem kolejności wyrazu. Np. daję 12345, a wywala 54321. Myślę, że trzeba pokombinować z pętlą For i odliczaniem w dół. Więcej pomysłów nie mam. A jak należałoby wypisywać kolejne litery? nie chodzi mi tym razem o strrev(). Chodzi o to żeby zrobić to w petli Użytkownik sauron edytował ten post 12 październik 2007, 17:06 Nie wiem, czy dobrze zrozumiałem, ale chyba chodzi o to:$s = 'abcdefgh'; for ($j=strlen($s)-1; $j>=0; $j--) echo $s{$j}; #bądź substr($s, $j, 1); |
|||
Sitedesign by AltusUmbrae. |