[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: "Перевертыш" слова
l@pteff
Здравствуйте, задача проста: вводится слово, выводится его перевертыш:

$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', т.е. с пробелом в начале smile.gif. Тебе надо написать $r=''; (два апострофа без пробела). Да и то при условии, что сам цикл верно написано (просто не вникал в него).

Спустя 6 минут (5.09.2011 - 22:08) Игорь_Vasinsky написал(а):
sergeiss
скока лет..скока зим..

l@pteff
strrev()
;)

Спустя 5 минут, 2 секунды (5.09.2011 - 22:13) sergeiss написал(а):
Цитата (Игорь_Vasinsky @ 5.09.2011 - 23:08)
sergeiss
скока лет..скока зим..

Есть ишшо порох в пороховницах smile.gif Просто летом как-то всё занят был всякой фигней.

Спустя 1 минута, 37 секунд (5.09.2011 - 22:15) l@pteff написал(а):
Игорь_Vasinsky, не, мне именно циклом надо.

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 написал(а):
Это
$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 'Палиндромы не найдены.';


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.