Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как отобразить зеркально строку?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
wrpoint
Отправлено: 10 Ноября, 2010 - 11:17:05
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Есть строка состоящая из n - го количества символов (1100100), необходимо ее отобразить в зеркальном виде (1101100), функция strrev не подходит, т.к. отображает строку слева на право и получается (0010011).
 
 Top
asik
Отправлено: 10 Ноября, 2010 - 11:57:22
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




http://docs.php.net/manual/ru/la...tors.logical.php
XOR
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $a = '11001101';
  4. function XorStr($in)
  5. {
  6.   for($i=0;$i<strlen($in);$i++)
  7.   {
  8.     $in[$i] = ((integer)(((bool)$in[$i]) xor true));
  9.   }
  10.   return $in;
  11. }  
  12.  
  13. echo XorStr($a);
  14. ?>
  15.  
 
 Top
DlTA
Отправлено: 10 Ноября, 2010 - 12:20:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




wrpoint пишет:
(1100100), необходимо ее отобразить в зеркальном виде (1101100)

а как это Вы такое получили?
в чем суть отзеркаливания?
 
 Top
wrpoint
Отправлено: 10 Ноября, 2010 - 12:39:37
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Большое спасибо asik, теперь задача будет решена.
А получилось, точнее началось все с того DITA, что мне загадали загадку с бумажной полоской, следующего вида: "Полоску бумаги сгибаем всегда в одну сторону и после каждого сгиба (далее шаг) разворачиваем полоску в исходное состояние, где остался след впуклый ставим "0", где выпуклый "1". Так вот после первого шага на полоске бумаги одно значение "0", после второго - три значения "100", после третьего шага - семь "1100100", после четвертого - пятнадцать (!!!) и т.д. Вопрос задачи в том, чтобы реализовать алгоритм, который позволит выводить правильную последовательность "0 и 1" при любом, случайно взятом шаге".
Еще раз спасибо всем за участие!
 
 Top
OrmaJever Модератор
Отправлено: 10 Ноября, 2010 - 13:20:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




wrpoint пишет:
(1100100), необходимо ее отобразить в зеркальном виде (1101100)

Это разве зеркальный вид? Напишите эти цыфры на бумажке и подойдите с ней к зеркалу и зравните.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
wrpoint
Отправлено: 10 Ноября, 2010 - 13:37:03
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




OrmaJever пишет:
то разве зеркальный вид? Напишите эти цыфры на бумажке и подойдите с ней к зеркалу и зравните.

Живешь, вот так, веришь в матрицу, а тут тебе раз и говорят, что ее не существует...)))
Да вы правы, это моя ошибка, точнее полу-ошибка, он зеркально-инверсионный. Спасибо за внимательность, OrmaJever!
 
 Top
asik
Отправлено: 10 Ноября, 2010 - 15:44:08
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




сори, условие не правильно понял =))
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $a = '101110000';
  4.  
  5. function ZerkStr($in)
  6. {
  7.   if (strlen($in) % 2)
  8.   {
  9.     $a  = substr($in,0,(strlen($in)/2)-1);
  10.     $b  = $in[round(strlen($in)/2)+1];
  11.     $b  = substr($in,-((strlen($in)/2)+1));
  12.   }else
  13.   {//чет
  14.     $a  = substr($in,0,(strlen($in)/2));
  15.     $b  = substr($in,-(strlen($in)/2));
  16.   };
  17.     $in = strrev($c) . strrev($b) . strrev($a);
  18.   return $in;
  19. };
  20. echo ZerkStr($a);
  21. ?>
  22.  
 
 Top
wrpoint
Отправлено: 12 Ноября, 2010 - 09:31:19
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




asik Спасибо Вам!

Первый вариант больше подошел и все Вы правильно поняли, поскольку метод рекурсивно-зеркальный пришлось использовать, получилось следующее:

CODE (htmlphp):
скопировать код в буфер обмена
  1. class my_method
  2.    
  3.    {
  4.  function XorStr($in)   // Функция, которая выдает зеркально-рекурсивное отображение строки        
  5.      
  6.    {            
  7.       for($i=0;$i<strlen($in);$i++)            
  8.        {
  9.          $in[$i] = ((integer)(((bool)$in[$i]) xor true));          
  10.        }        
  11.    return strrev($in);
  12.    }        
  13.  }  
  14.  
  15. $cos = new my_method() ;
  16. $tar = $cos->XorStr($f) ;
  17. echo  "<br/ >"."Реверс: ".$tar ;

(Отредактировано автором: 12 Ноября, 2010 - 09:38:01)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB