Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2016, 23:29   #1
Jleksern
Форумчанин
 
Аватар для Jleksern
 
Регистрация: 14.10.2011
Сообщений: 137
Радость Переместить цифру в тексте

Доброго времени суток.
Вот задался вопросом и не могу догнать скрипт.

Суть такова, есть строка "qw2erty" в которой есть цифра 2, нужно цифру переместить на N количество знаков сколько указано в слове.
В результате "qwer2ty".

В случае если в слове "qwert7y", цифра 7 будет перемещена на 7 цифр вперед вне зависимости от того, закончилось слово или нет, просто отсчёт продолжается с начала слова.

А если в слове две цифры то переносится каждая на N знаков вперед...

Вот кто у кого есть идеи по решению такой задачи?
Jleksern вне форума Ответить с цитированием
Старый 10.02.2016, 00:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

задачка несложная, если Вы расскажите,
что должно получится из строк:

qwert7y

a12b1c20d
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.02.2016, 09:30   #3
Jleksern
Форумчанин
 
Аватар для Jleksern
 
Регистрация: 14.10.2011
Сообщений: 137
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
задачка несложная, если Вы расскажите,
что должно получится из строк:

qwert7y

a12b1c20d
Каждая цифра делает скачки через буквы, количество скачков указано самой цифрой.
Результат a1b2c10d2
Повторно цифры которая уже делала скачок не используется, то есть, одноразовое перемещение для цифры.

Ноль соответственно это отсутствие значения.



Вот ещё один пример.


Что меня тут сбило, что цифры могут менять свои места и проблема чтоб повторно её не "поймать" и не отправить перемещаться.
Jleksern вне форума Ответить с цитированием
Старый 10.02.2016, 13:05   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да, заковыристая задачка. На первый взгляд она проще, чем на самом деле

пробуй:
Код:
var s, sd :string;
 i,k, code : integer;
 ch:char;
begin
  s:='q3w2erty';
  s:='a12b1c20d';
  s:='a2b3f8';
//  s:='qwert7y';
  WriteLn('----------------');  WriteLn(s);
  sd := '';
  for i:=1 to Length(s) do sd := sd + ' ';
  i:=1;
  while i<=Length(s) do begin
    if s[i] in ['1'..'9'] then begin
      code := ord(s[i])-ord('0');
      if code<>Length(s) then begin
        k:=code+i;
        if k>Length(s) then k:= (k mod Length(s))+1;
        ch:=s[i];
        Delete(s,i,1);
        Delete(sd,i,1);
        Insert(ch, sd, k);
        Insert('*', s, k);
        Dec(i);
      end;
    end;
    inc(i);
  end;
  for i:=1 to Length(s) do
    if (s[i]='*') and (sd[i]<>' ') then s[i] := sd[i];
  WriteLn(s);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.02.2016, 14:59   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

могет задачи на Паскале в другой раздел надо?
ADSoft вне форума Ответить с цитированием
Старый 10.02.2016, 15:08   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ТС же скрипт вроде нужен. А код паскалевский пригодится для наводки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.02.2016, 11:50   #7
Jleksern
Форумчанин
 
Аватар для Jleksern
 
Регистрация: 14.10.2011
Сообщений: 137
По умолчанию

Спасибо большое за код на паскеле, с горем пополам переписал под PHP.
Вроде бы получилось, обнаружил небольшой баг, где-то я проглядел и не могу сейчас заметить ошибку.

Код:
function leap($string){
	$count_str = strlen($string);
		for($i=0; $i<=$count_str; $i++ ){
			if(is_numeric($string[$i]) and $string[$i]!=0){
				$code = $string[$i];
				if($code <> $count_str){
					$k = $code+$i+1;
					if($k>$count_str){
						$k = $k % $count_str+1;
					}
					$string[$i] = null;
					$string_end = substr($string, $k, $count_str);
					$string_start   = substr($string, 0, $k);
					return $string_start.$code.$string_end;
				}
			}
		}
	} 


echo leap('a6qwer');
Так код работает только если в случае цифра не возвращается не предыдущее место.
То есть a6qwer, 6 вернется на свое место, сделав круг. Так не работает. Если другое число сработает.
Помогите фиксануть.
Jleksern вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан символ С, изображающий цифру или букву (латинскую или русскую). Если С изображает цифру, то вывести строку "digit", если латин marinadanilova Помощь студентам 3 28.10.2014 22:44
Переместить файл Cas01 PHP 4 30.05.2013 08:11
некоторое число оканчивается на 2, если эту цифру переместить на первое место, то число удвоится. написать программу поиска числа Noob325 Помощь студентам 6 06.12.2012 10:39
переместить курсор Screame Microsoft Office Excel 2 29.08.2009 10:58