Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP-problem] Palindrom
Forum PHP.pl > Forum > PHP
Apticer
Dostałem zadanie które nie za bardzo wiem jak zrobić czy nawet się za to zabrać..

Napisz funkcję, której argumentem jest dowolny tekst. Funkcja zwraca palindrom tekstu w którym
każde słowo jest pisane od dużego znaku.
Plik z funkcją jest wczytywany do kodu HTML z osobnego pliku. Wpisany tekst i palindrom powinny
pojawić się na ekranie.

Wie ktoś może jak się za to zabrać? Jakaś gotowa funkcja?
phpion
strrev + strtolower + ucwords
Kshyhoo
Sama funkcja sprawdzająca może wyglądać tak:
[ciach]

Apticer
Wielkie dzięki za pomoc! smile.gif

Wiem, że dużo się nie napracowałem, ale... napotkałem mały problem...
  1. <?php
  2. $pali = "Nogawka jak wagon";
  3. echo "$pali <BR><BR>";
  4.  
  5. $pali = strrev($pali);
  6. echo "$pali <BR><BR>";
  7.  
  8. $pali = strtolower($pali);
  9. echo "$pali <BR><BR>";
  10.  
  11. $pali = ucwords(strtolower($pali));
  12. echo "$pali <BR><BR>";
  13. ?>

Teraz jako wynik zwraca coś takiego
  1. Nogawka jak wagon
  2.  
  3. nogaw kaj akwagoN
  4.  
  5. nogaw kaj akwagon
  6.  
  7. Nogaw Kaj Akwagon


A dałoby rade, żeby zwracało?
  1. Nogawka jak wagon
  2.  
  3. nogaw kaj akwagoN
  4.  
  5. nogaw kaj akwagon
  6.  
  7. Nogaw Kaj Akwagon
  8.  
  9. Nogawka Jak Wagon
phpion
Nie. Skąd skrypt ma wiedzieć, że nie ma czegoś takiego jak "Nogaw"? W zasadzie to jednak można zrobić to co chcesz winksmiley.jpg
Cytat
Nogawka jak wagon // tekst wejściowy

nogaw kaj akwagoN // tutaj mieszasz

nogaw kaj akwagon // dalej mieszasz

Nogaw Kaj Akwagon // jeszcze kombinujesz

Nogawka Jak Wagon // wyświetlasz tekst wejściowy (ten sam!) z wielkimi literami na przodzie wyrazów smile.gif
Apticer
@up
to się nie sprawdzi, bo musze oddać też kod php wstydnis.gif

Wpadłem na pewien (chyba dobry) pomysł, ale mam problem z realizacją...

  1. <?php
  2. $palispr = "Nogawka Jak Wagon";
  3. $pali = "Nogawka jak wagon";
  4. echo "$pali <BR><BR>";
  5.  
  6. $pali = strrev($pali);
  7. echo "$pali <BR><BR>";
  8.  
  9. $pali = strtolower($pali);
  10. echo "$pali <BR><BR>";
  11.  
  12. $pali = ucwords(strtolower($pali));
  13. echo "$pali <BR><BR>";
  14.  
  15. if ($pali = $palispr)
  16. {
  17. echo "$pali<BR><BR>";
  18. }
  19. else
  20. {
  21.  
  22.  
  23. }
  24. ?>


Chciałem zrobić tak by sprawdzało czy wynik jest równy temu co ja chciałbym, żeby wyszło. Tylko nie bardzo wiem jak zrobić pętle do tego i rozdzialić $pali na pojedyńcze znaki tak, żeby mogło je w jakiś sposób przemieszczać... Prawdopodobnie niemożliwe do realizacji, ale to mój, niestety, ostatni pomysł ;D


#Edit
Próbowałem, nie da rady - a przynajmniej ja nie wiem jak... czyli dupa ;/
bim2
Żeby odczytać konkretny znak
  1. echo $pali{1};

smile.gif Kombinuj z przesuwaniem spacji winksmiley.jpg
celbarowicz
kobyła ma mały bok
Daniel Meger
Cały misz-masz rozgrywa się w funkcji place_spaces(). Jeżeli czegoś nie rozumiesz - pytaj, choć po przeczytaniu manuala dla każdej z funkcji z biblioteki głównej użytej w tym skrypcie, wszystko powinno być jasne.
Musisz sobie to przerobić na funkcję, żeby spełnić warunki zadania.
  1. <pre>
  2. <?php
  3. $dane = "Nogawka jak wagon";
  4. //$dane = "kobyła ma mały bok";
  5.  
  6. // funkcja znajdująca spacje w zdaniu
  7. function find_spaces($string) {
  8. $tablica = Array();
  9. for ($i = 0, $max = strlen($string); $i<$max; $i++) {
  10. if ($string[$i] === ' ') {
  11. $tablica[] = $i;
  12. }
  13. }
  14. return $tablica;
  15. }
  16.  
  17. // funkcja wklejająca spacje w zdanie
  18. function place_spaces($string, $spaces) {
  19. $string = implode('',explode(' ', $string)); // scalanie stringa w jeden
  20.  
  21. $ret = ''; // przygotowanie zmiennej do wyniku
  22. $max = strlen($string);
  23. $j = 0;
  24. for ($i = 0; $i<$max; $i++){
  25. $ret .= $string[$i];
  26. if ($i == $spaces[$j]-($j+1)) { // jeżeli miejsce odpowiada spacji, to wklej spację i zwiększ licznik $j tablicy spacji
  27. $ret .= ' ';
  28. $j++;
  29. }
  30. // echo "$i : $ret <br /> \n"; // wyświetl poszczególne kroki
  31. }
  32. return $ret;
  33. }
  34.  
  35. echo $dane . '<br />';
  36. $spaces = find_spaces($dane);
  37. $dane = strrev($dane);
  38. /*
  39.   echo 'Spacje na miejscach:<br />';
  40.   print_r($spaces);
  41.  */
  42. echo $dane . '<br />';
  43. $dane = place_spaces($dane,$spaces);
  44. echo $dane . '<br />';
  45. $dane = strtolower($dane);
  46. echo $dane . '<br />';
  47. $dane = ucwords($dane);
  48. echo $dane . '<br />';
  49.  
  50. ?>
  51. </pre>
cisu
Ja nie wiedziałem, że jest taka funkcja jak strrev, a dla siebie napisałem swoją, może komuś się przyda smile.gif

  1. function palindrom($str)
  2. {
  3. $str1 = strtolower($str);
  4. $dlugosc = strlen($str1);
  5.  
  6. if($dlugosc > 0) { // sprawdzamy, czy podany ciąg nie jest pusty
  7. for($i=0;$i<=$dlugosc;$i++)
  8. {
  9. $temp = $str1[$dlugosc - $i];
  10. $str2 .= $temp; // generujemy ciąg odwrotny do podanego
  11. }
  12. if($str1 == $str2) // porównujemy oba ciągi
  13. {
  14. return true; // jeśli są one identyczne, funkcja zwraca wartość true
  15. } else
  16. {
  17. return false; // a jeśli nie, wartość false
  18. }
  19. } else
  20. {
  21. return false; // jeśli podany ciąg jest pusty, również jest zwracana wartość false
  22. }
  23. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.