Найти и заменить
Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
В текстовом редакторе Microsoft Word имеется достаточно мощный механизм поиска и замены, который доступен после установки флажка Подстановочные знаки (Use wildcards). При этом некоторые символы в строке поиска получают особый смысл.
Так, знаком вопроса в шаблоне поиска можно задать ровно один любой символ. Кроме того, в шаблоне поиска на месте одного
из символов в квадратных скобках можно перечислить сразу несколько символов, никак их при этом не разделяя (поиск
будет считаться успешным, если на этом месте стоит один из символов, указанных в [ ]). В квадратных скобках можно вместо
любого символа указывать и диапазоны символов. Мы будем использовать только три следующих диапазона: 0-9, a-z и A-Z (других диапазонов
не будет). В этом случае будет искаться один любой символ из указанного диапазона (диапазонов). Если же первый символ в
квадратных скобках – !, то, наоборот, искаться будет любой символ, из не перечисленных после восклицательного
знака в квадратных скобках (например, [!.a-z,] означает один любой символ кроме точки, запятой, и строчных латинских букв).
Если же искать надо один из специальных символов !, ?, [, ], (, ), -, \ то, как в квадратных скобках,
так и без скобок перед таким символом ставится \.
Еще одно замечательное свойство строки поиска – выражения.
Выражением считается часть строки поиска, взятая в круглые скобки. Пар скобок может быть до 9,
но вложенность не допускается. В строке замены выражения представляются в виде \`n`,
где `n` – порядковый номер выражения в шаблоне поиска (от 1 до 9). Например, по шаблону поиска (k)(?)t и шаблону
замены t\2\1 произойдут например, следующие замены:
kot `→` tok
kit `→` tik
Таким образом, в строке замены существует только один специальный символ – \, после которого обязательно должна идти цифра. Причем, например, цифра 5 может идти только если в строке поиска было не менее пяти выражений в скобках. При этом символы !, ?, [, ], (, ), - в строке замены указываются без предшествующего
символа \, а символ \ используется только перед цифрой и обозначает номер выражения.
В качестве символа, который должен попасть в конечный текст, символ \ в строке замены не может быть использован.
Поиск начинается с первого символа текста. Находится первый фрагмент, который соответствует шаблону поиска,
и производится его замена в соответствии с шаблоном замены. После этого поиск продолжается с символа, следующего за замененным фрагментом. Если снова находится фрагмент, соответствующий шаблону поиска, то он снова заменяется, и так далее до тех пор, пока поиск не достигнет конца текста.
Требуется по данному образцу поиска и образцу замены, произвести все замены в заданном тексте.
В первой строке входного файла расположен текст, в котором требуется произвести все необходимые замены. Длина текста не превышает 100 символов. Во второй строке записан шаблон для поиска.
Шаблон является корректным: каждой открывающей скобке соответствует закрывающая, восклицательный знак как спецсимвол употребляется только сразу за символом [ и т.д. В третьей строке расположен шаблон для замены. Выражения в шаблоне для замены также корректны. Длины шаблонов не превышают 100 символов. Коды всех символов, встречающихся как в тексте, так и в шаблонах находятся в диапазоне от 32 до 126. Символы перевода строки в сами шаблоны и в текст не входят.
Выведите в выходной файл одну строку – текст после всех произведенных замен.
Пример ввода 1
Nothing is found.
find
replace
Пример вывода 1
Nothing is found.
Пример ввода 2
To be or not to be?
[A-Za-z][a-z]([!a-z])
be\1
Пример вывода 2
be be be nbe be be?
Пример ввода 3
To be or not to be?
(?)[a-z](?b)
\2\1
Пример вывода 3
bTe or not bte?
Пример ввода 4
http:\\olympiads.ru
\\\\
//!
Пример вывода 4
http://!olympiads.ru
Московская городская олимпиада школьников по информатике, 2008