Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> задача про палиндром, нужна помощь
kirik  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Жадный квантификатор
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6128
Пользователь №: 4795
На форуме: 8 лет, 7 месяцев, 24 дня
Карма: 118




Цитата (Trianon @ 5.04.2011 - 03:33)
Подобного рода ложные срабатывани я и имел в виду.

Понял. На досуге ещё посижу smile.gif
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kvant  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 25
Пользователь №: 27099
На форуме: 5 лет, 8 месяцев, 4 дня
Карма:




нужно эту задачу решить с помощью цикла for и функции substr. Кто нибудь поможет? Пожалуйста!
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kirik  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Жадный квантификатор
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6128
Пользователь №: 4795
На форуме: 8 лет, 7 месяцев, 24 дня
Карма: 118




Кто знает, кто знает...
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 6 дней
Карма: 256




Цитата (kvant @ 6.04.2011 - 08:21)
нужно эту задачу решить с помощью цикла for и функции substr. Кто нибудь поможет? Пожалуйста!

1) сделай цикл по всем символам
2) от каждого символа стартуй цикл вперед и на его итерации получай текущую вырезанную часть и обратную. Если есть палиндромы запоминай их, если нет, то на следующую итерацию 1)

Сложно что ли такой простой алгоритм реализовать? Он просто требует времени, отладки, а интереса алгоритмического мне например не представляет, чтобы сюда "кодика кинуть" wink.gif


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kvant  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 25
Пользователь №: 27099
На форуме: 5 лет, 8 месяцев, 4 дня
Карма:




все таки задачу про палиндром никто не смог решить! Там обстоят дела так что нужно было сделать задачку с формай, то есть два баттона где вводиш слово! Ну все равно спасибо за помощь!!!
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
l@pteff  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 529
Пользователь №: 24680
На форуме: 6 лет, 29 дней
Карма: 20





<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<form
method="post">
Введите строку: <input name="word" id="word" size="36"/>
<input
type="submit" value="Ok" />


function compare_length($str1, $str2) {
$length1 = mb_strlen($str1, 'UTF-8');
$length2 = mb_strlen($str2, 'UTF-8');
if ($length1 > $length2)
return 1;
}

if (!$_POST['word']) exit ('Нет данных');
$word=trim(htmlspecialchars($_POST['word']));
$arr_poly=array();
$arr = explode(' ', $word);
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('<br><br>'.array_pop($arr_poly).'-полиндром максимальной длины.');
echo '<br><br>'.'Полиндромы не найдены.';
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Sergamers  
[x] Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered










// Дана строка текста.

// Написать программу на php, которая определяет является ли строка текста полиндромом (читается с обоих сторон одинаково) и осуществляет вывод строки следующим способом:

// а) если строка является полиндромом, то она выводится полностью.

// б) если строка не является полиндромом - выводится самый длинный под-полиндром этой строки, т.е. самая длинная часть строки, являющаяся полиндромом.

// в) если подполиндромы отсутствуют в строке - выводится первый символ строки.

// Примеры полиндромов:
// - Аргентина манит негра
// - Sum summus mus


class palindrome{
// Показать Подробнее
public function getMorePalindrome($str){
$sentence = mb_strtolower($str);
$sentence = str_replace(' ', '', $sentence);

return 'Из строки "'.$str.'" ('.$sentence.'::'.$this->strrev_enc($sentence).') получился "'.$this->getPalindrome($str).'" <hr>';
}


// Получить полиндром
public function getPalindrome($str) {
$sentence = mb_strtolower($str);
$sentence = str_replace(' ', '', $sentence);

// если строка пуста
if(!mb_strlen($sentence)){
return '';
}

$revSentence = $this->strrev_enc($sentence);

// Если строка идентична
if($sentence == $revSentence){
return $str;
}

$arrP = $this->searchAllP($sentence, $revSentence);

for($i=0, $palindrome='', $l=0; $i<count($arrP); $i++){
$strLength = iconv_strlen($arrP[$i], 'UTF-8');
if($l<$strLength){
$l = $strLength;
$palindrome = $arrP[$i];
}
}


return $palindrome;
}

// Делает инвертирование строки
public function strrev_enc($str){
$str = iconv('utf-8', 'windows-1251', $str);
$str = strrev($str);
$str = iconv('windows-1251', 'utf-8', $str);
return $str;
}

// Поиск всех полиндромов
protected function searchAllP($str, $rev){
$arrP = array();
$words = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);

for($i=0; $i<count($words); $i++){
$reg = preg_quote($words[$i]);
$arrP[] = $this->searchLengthP($reg, $rev, $i, $words);
}

return $arrP;
}

// Поиск Конкретного полиндрома
protected function searchLengthP(&$reg, &$rev, $i, &$words, $sw = ''){
if(preg_match('#'.$reg.'#u', $rev, $m)){
$sw = $m[0];

if($i+1<count($words)){
$i++;
$reg .= preg_quote($words[$i]);

return $this->searchLengthP($reg, $rev, $i, $words, $sw);
}
}


return $sw;
}
}


$palindrome = new palindrome();
echo $palindrome->getMorePalindrome("аlol Лепса Спел lol");
echo $palindrome->getMorePalindrome("Лепс+Спела");
echo $palindrome->getMorePalindrome("Моя Лепса Спела");
echo $palindrome->getMorePalindrome("Аргентина манит негра");
echo $palindrome->getMorePalindrome("Sum summus mus");


user posted image

Диаграмма не точная. Было лениво перерисовывать, но смысл должен быть понятным
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Shnir  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата
echo $palindrome->getMorePalindrome("Sum summus mus");


А для вот такой строки: "Sum sumadmus mus"
ваш скрипт выдает что-то непонятное:
Из строки "Sum sumadmus mus" (sumsumadmusmus::sumsumdamusmus) получился "sumsum"
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Shnir  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









вот еще похожий расклад:
Из строки "Sum sumddadadmus mus" (sumsumddadadmusmus::sumsumdadaddmusmus) получился "sumsumd"

для строки в которой реально есть палиндром из 7 символов, выдает результат строку 8 символов которая не является палиндромом...
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 19 дней
Карма: 13




kvant, знакомая задача smile.gif Несколько строк кода на самом деле. Правильно понимаю , что по вакансии пытаешься делать ?
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса