$word=$_POST['word'];
$r=' ';
for ($i=strlen($word); $i>=0; $i--) {
$r .= $word[$i];
}
if (strcasecmp($word, $r)==0) echo 'Палиндром';
Почему если я ввожу, например "ХХХ" не выводится что это палиндром?
Спустя 3 минуты, 49 секунд (5.09.2011 - 22:02) sergeiss написал(а):
Потому что у тебя второе слово будет такое: ' XXX', т.е. с пробелом в начале . Тебе надо написать $r=''; (два апострофа без пробела). Да и то при условии, что сам цикл верно написано (просто не вникал в него).
Спустя 6 минут (5.09.2011 - 22:08) Игорь_Vasinsky написал(а):
sergeiss
скока лет..скока зим..
l@pteff
скока лет..скока зим..
l@pteff
strrev();)
Спустя 5 минут, 2 секунды (5.09.2011 - 22:13) sergeiss написал(а):
Цитата (Игорь_Vasinsky @ 5.09.2011 - 23:08) |
sergeiss скока лет..скока зим.. |
Есть ишшо порох в пороховницах Просто летом как-то всё занят был всякой фигней.
Спустя 1 минута, 37 секунд (5.09.2011 - 22:15) l@pteff написал(а):
Игорь_Vasinsky, не, мне именно циклом надо.
sergeiss, спс, действительно пробел не учел smile.gif
sergeiss, спс, действительно пробел не учел smile.gif
Спустя 19 минут, 2 секунды (5.09.2011 - 22:34) l@pteff написал(а):
Ещё возник вопрос: если вводимое слово на русском, выводится вопросиками (кодировка utf-8), если кодировка windows-1251, то слово выводится норм, а вот "Палиндром"-иероглифами. Подскажите пжл, как исправить?
header('Content-Type: text/html;charset=windows-1251');
if (!$_POST['word']) exit ('Нет данных.');
$word=$_POST['word'];
$r='';
for ($i=strlen($word); $i>=0; $i--) {
$r .= $word[$i];
echo $word[$i];
}
if (strcasecmp($word, $r)==0) echo 'Палиндром';
Спустя 2 минуты, 6 секунд (5.09.2011 - 22:36) Игорь_Vasinsky написал(а):
сам файл должен быть в юникоде без BOM (в подписи линк)
Спустя 1 минута, 57 секунд (5.09.2011 - 22:38) Invis1ble написал(а):
если юникод - нужно юзать mb_* версии строковых ф-ций
Спустя 36 минут, 8 секунд (5.09.2011 - 23:14) l@pteff написал(а):
Invis1ble, пробовал закодировать входящую строку через mb_convert_encoding():
Результат тот же:
header('Content-Type: text/html;charset=utf-8');
$word=$_POST['word'];
mb_convert_encoding($word, "windows-1251");
Результат тот же:
Цитата |
���Палиндром |
Или что-то совсем не то делаю?
Спустя 6 минут, 35 секунд (5.09.2011 - 23:20) twin написал(а):
Это
Invis1ble же сказал - юзай строковые функции коллекции mb_
$word[$i];с многобайтными не работает.
Invis1ble же сказал - юзай строковые функции коллекции mb_
Спустя 15 минут, 45 секунд (5.09.2011 - 23:36) l@pteff написал(а):
strlen() заменил на mb_strlen(). Но здесь не понял:
Цитата |
Это $word[$i]; с многобайтными не работает. |
А как же без $word[$i] будет выглядеть цикл?
Спустя 36 минут, 52 секунды (6.09.2011 - 00:13) Игорь_Vasinsky написал(а):
на циферки кодировка не мудрит....
вот что глючит
вот что глючит
Цитата |
echo $word[$i]; |
попробуй
echo iconv("utf-8", "windows-1251", $word[$i]);
Спустя 6 минут, 49 секунд (6.09.2011 - 00:20) l@pteff написал(а):
$word=$_POST['word'];
$r='';
for ($i=strlen($word); $i>=0; $i--) {
$r .= $word[$i];
echo iconv("utf-8", "windows-1251", $word[$i]);
}
Игорь_Vasinsky, так пустота на выходе почему-то
Спустя 2 часа, 54 минуты, 59 секунд (6.09.2011 - 03:15) kirik написал(а):
Цитата (l@pteff @ 5.09.2011 - 16:36) |
А как же без $word[$i] будет выглядеть цикл? |
через mb_substr()
тут готовый :)
define('ENC', 'UTF-8');
$poly = '';
$word = 'улыбок тебе дед макар';
for($i = mb_strlen($word, ENC); $i >= 0; $i--) {
$poly .= mb_substr($word, $i, 1, ENC);
}
echo $poly;
Спустя 5 часов, 10 минут, 32 секунды (6.09.2011 - 08:25) l@pteff написал(а):
работает, большое спасибо!
Спустя 1 день, 12 часов, 14 минут, 51 секунда (7.09.2011 - 20:40) l@pteff написал(а):
Всем привет, еще вопрос в тему. Есть скрипт, который во введенной строке должен находить палиндром максимальной длины. Все работает, но с кодировкой проблема: не воспринимает строки, введенные на русском языке. Вот код:
define('ENC', 'UTF-8');
function compare_length($str1, $str2) {
$length1 = mb_strlen($str1, ENC);
$length2 = mb_strlen($str2, ENC);
if ($length1 > $length2)
return 1;
}
if (!$_POST['stroka']) exit ('Нет данных');
$stroka=trim(htmlspecialchars($_POST['stroka']));
$arr_poly=array(); /*создаем пустой массив для палиндромов*/
$arr = explode(' ', $stroka); /*разбиваем строку на слова*/
for($i = 0; $i < count($arr); $i++) {
$r=strrev($arr[$i]); /*читаем слово наоборот*/
if ($arr[$i]==$r) $arr_poly[]=$r; /*если палиндром, заносим в массив*/
}
usort($arr_poly, "compare_length");
if ($arr_poly) exit(array_pop($arr_poly).'-палиндром максимальной длины.');
echo 'Палиндромы не найдены.';