Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] zamiana liter w wyrazach
bronx
post
Post #1





Grupa: Zarejestrowani
Postów: 333
Pomógł: 0
Dołączył: 4.03.2004

Ostrzeżenie: (0%)
-----


witam!

mam taki problem...

musze pod php napisać skrypcik o nazwqie "szyfrowanie AtBash". Czyli w danym tekście (np 4-5 zdań) zamienia w każdym wyrazie literke na przeciwległą w alfabecie... czyli zamiast A wstawi Z, zamiast B wstawi Y itd...

wie ktos jak to zrobić ?

najlepiej by było gdyby skrypt rozróżniał też małe i duże liter (czyli za małą wstawi małą a za dużą dużą)

z góry dziękuje za pomoc...
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Co Ci będzie potrzebne:
1. tablica:
  1. <?php
  2. $array = array('a' => 'z', 'b' => 'y'); // itd
  3. ?>

lub odpowiednie obliczenia na kodach znaków.
2. pętla for śmigająca tekst znak po znaku
3. Odwołanie do tablicy poprzez $array[$znak].

Powodzenia, nie jest to trudne zadanie.

Ten post edytował phpion 26.01.2008, 21:25:33
Go to the top of the page
+Quote Post
bronx
post
Post #3





Grupa: Zarejestrowani
Postów: 333
Pomógł: 0
Dołączył: 4.03.2004

Ostrzeżenie: (0%)
-----


ja myślałem, żeby to zrobić jakoś na liczbach... alfabet ma 26 liter... ale w sumie Twoje roziwązanie też może być...

może nie jest to trudne, ale ja nie moge sobie z tym poradzić :/ Nie wiem jak lecieć tekst znak po znaku :/ i jak potem zamienić znaki :/

zrobiłem takie coś... co dalej ?

  1. <?php
  2. $array = array('a' => 'z', 'b' => 'y', 'c' => 'x', 'd' => 'w', 'e' => 'v', 'f' => 'u', 'g' => 't', 'h' => 's', 'i' => 'r', 'j' => 'q', 'k' => 'p', 'l' => 'o', 'p' => 'k', 'q' => 'j', 'r' => 'i', 's' => 'j', 't' => 'g', 'u' => 'f', 'v' => 'e', 'w' => 'd', 'x' => 'c', 'y' => 'b', 'z' => 'a',);
  3.  
  4. $tekst = "ala ma sobie rudego kocurka";
  5.  
  6. ?>
Go to the top of the page
+Quote Post
1010
post
Post #4





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


  1. <?
  2.  
  3. $tekst = "to jest jakiś twój tekst";
  4.  
  5. $array = array('a' => 'z', 'b' => 'y', 'c' => 'x', 'd' => 'w', 'e' => 'v', 'f' => 'u', 'g' => 't', 'h' => 's', 'i' => 'r', 'j' => 'q', 'k' => 'p', 'l' => 'o', 'p' => 'k', 'q' => 'j', 'r' => 'i', 's' => 'j', 't' => 'g', 'u' => 'f', 'v' => 'e', 'w' => 'd', 'x' => 'c', 'y' => 'b', 'z' => 'a', ' ' => ' ');
  6.  
  7. $ile_znakow = strlen($tekst);
  8.  
  9. for($i=0; $i<$ile_znakow; $i++)
  10. {
  11.  $tekst[$i] = $array[$tekst[$i]];
  12. }
  13.  
  14. print $tekst;
  15.  
  16. ?>


pisane z palca, ale powinno działać...

Pozdro

Ten post edytował 1010 26.01.2008, 21:51:20


--------------------
Go to the top of the page
+Quote Post
webdice
post
Post #5


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. <?php
  2.  
  3. $array1 = array ('a', 'b');
  4. $array2 = array ('z', 'y');
  5.  
  6. $string = "ala ma sobie rudego kocurka";
  7.  
  8. print str_replace ($array1, $array2, $string);
  9.  
  10. ?>
Go to the top of the page
+Quote Post
bronx
post
Post #6





Grupa: Zarejestrowani
Postów: 333
Pomógł: 0
Dołączył: 4.03.2004

Ostrzeżenie: (0%)
-----


oba działają - wielkie dzięki smile.gif

no dobra, a jak w tym drugim przykładzie zrobić żeby działałą też na duże i małe litery ? przepuścić string najpierw przez jedno str_replace a potem przez drugie ? (z tablicami z dużymi literami) ?

Ten post edytował bronx 26.01.2008, 22:01:29
Go to the top of the page
+Quote Post
1010
post
Post #7





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


Rozbuduj dwie tablice
  1. <?
  2. $array1 = array ('a', 'b', ... 'A', 'B');
  3. $array2 = array ('z', 'y', ... 'Z', 'Y');
  4. ?>


--------------------
Go to the top of the page
+Quote Post
webdice
post
Post #8


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. <?php
  2.  
  3. $array1 = array ('a', 'A', 'b', 'B');
  4. $array2 = array ('z', 'Z', 'y', 'Y');
  5.  
  6. $string = "ala ma sobie rudego kocurka AAA";
  7.  
  8. print str_replace ($array1, $array2, $string);
  9.  
  10. ?>
Go to the top of the page
+Quote Post
bronx
post
Post #9





Grupa: Zarejestrowani
Postów: 333
Pomógł: 0
Dołączył: 4.03.2004

Ostrzeżenie: (0%)
-----


niestety, ale ten kod jednak nie działa

  1. <?php
  2.  
  3. $array1 = array ('a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'o', 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z');
  4.  
  5. $array2 = array ('z', 'Z', 'y', 'Y', 'x', 'X', 'w', 'W', 'v', 'V', 'u', 'U', 't', 'T', 's', 'S', 'r', 'R', 'q', 'Q', 'p', 'P', 'o', 'O', 'n', 'N', 'm', 'M', 'l', 'L', 'k', 'K', 'j', 'J', 'i', 'I', 'h', 'H', 'g', 'G', 'f', 'F', 'e', 'E', 'd', 'D', 'c', 'C', 'b', 'B', 'a', 'A');
  6.  
  7. $string = "a b c d e f g h i j k l m n o p q r s t u w x y z";
  8.  
  9. echo "$string<br />";
  10.  
  11. print str_replace ($array1, $array2, $string);
  12.  
  13. ?>


ponieważ pokazuje takie ciągi:

Kod
a b c d e f g h i j k l m n o p q r s t u w x y z
a b c d e f g h i j k l m m l k j i h g f d c b a


na górze oryginalny a na górze po zamianie i jak widać coś nie trybi :|
Go to the top of the page
+Quote Post
webdice
post
Post #10


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Spróbuj rozbić sobie to na 4 tablice (2 z małymi literami oraz 2 z dużymi literami) i zastosuj 2 razy funkcje str_replace" title="Zobacz w manualu PHP" target="_manual. Powinno zadziałać.
Go to the top of the page
+Quote Post
bronx
post
Post #11





Grupa: Zarejestrowani
Postów: 333
Pomógł: 0
Dołączył: 4.03.2004

Ostrzeżenie: (0%)
-----


niestety nie w tym jest problem... nawet gdy mam tylko z małymi literami efekt jest taki sam... dopiero po połowie zamienia...
Go to the top of the page
+Quote Post
Kicok
post
Post #12





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Przy pomocy str_replace" title="Zobacz w manualu PHP" target="_manual ciężko to będzie zrobić, bo funkcja ta idzie sekwencyjnie po elementach tablicy i najpierw zamieni wszystkie litery "a" na "z", a pod koniec wszystkie litery "z" (łącznie z już zamienionymi literami "a") zamieni na a


Trzeba będzie przejechać pętlą po tekście, sprawdzać kod ASCII każdego znaku i jeśli znak ten będzie literą z pierwszej połowy alfabetu, to dodać do kodu ASCII 13 i zamienić z powrotem na literę (analogicznie jeśli litera będzie z drugiej połowy alfabetu to odejmujemy 13)
http://asciitable.com/
ord" title="Zobacz w manualu PHP" target="_manual
chr" title="Zobacz w manualu PHP" target="_manual



PS. A teraz spoiler:
str_rot13" title="Zobacz w manualu PHP" target="_manual tongue.gif


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 08:30