28. november 2006 - 20:14
Der er
7 kommentarer og 1 løsning
Test om en streng er et palindrom
Hejsa Jeg har lavet et forslag, kan det laves bedre/anderledes? $test_streng = str_replace(" ","",strtolower($_REQUEST['palindrom'])); $str_len = strlen($test_streng); while($str_len >= 0) { $slut_streng .= $test_streng[$str_len]; $str_len--; } if($slut_streng == $test_streng) { echo "OK"; }
Annonceindlæg fra HP
28. november 2006 - 21:03
#1
preg_match er nok hurtigere: if (preg_match("#^(.*)\\1$#i",str_replace(" ","",$_REQUEST['palindrom'])) === true) { echo "OK"; } :) -- Morten Barklund
28. november 2006 - 21:10
#2
Her er et forslag: $ord = strtolower( $_REQUEST['palindrom'] ); $e = strlen( $ord ); $b = 0; while ( $b <= $e+1 && $ok = ( $ord[$b++] == substr( $ord, --$e, 1 ) ) ) ; echo $ok ? "OK" : "NOPE"; Hvis du også vil detektere anderledes palindromer som f.eks. "En af dem, der red med fane" kan du lave: $ord = strtolower( $_REQUEST['palindrom'] ); om til: $ord = preg_replace( "/[^a-z]/", "", strtolower( $_REQUEST['palindrom'] ) );
28. november 2006 - 21:11
#3
Orv, det havde jeg slet ikke tænkt på barklund, nice :-D
28. november 2006 - 21:16
#4
Hmm ved nærmere eftertanke, vil den virke efter hensigten? Jeg kan godt se hvad hensigten er, med backreference, men sammenligner den ikke hele ordet med sig selv i stedet for at vende det om?
28. november 2006 - 21:23
#5
Barklund, tror ikke den virker ;) Alternativt: $ord = preg_replace( "/[^a-z]/", "", strtolower( $_REQUEST['palindrom'] ) ); echo $ord == strrev( $ord ) ? "OK" : "NOPE"; :)
28. november 2006 - 21:31
#6
coderdk, ohja, min fejl - jeg sad vidst og tænkte på for mange ting :) Dit sidste forslag tror jeg også er det optimale :)
01. november 2007 - 00:12
#7
Smid et svar
01. november 2007 - 00:12
#8
Smid et svar
Vi tilbyder markedets bedste kurser inden for webudvikling