Skip to content

Сравнение путей

Требуется провести сравнение двух путей (к файлам). Пути к файлам задаются в стиле ОС Unix. Корневой каталог – /. Домашний и текущий каталог вводятся как абсолютные пути (например, домашний каталог может иметь вид «/home/user»). В каждом из анализируемых путей могут встречаться символы:

  • символ ‘.’ – обозначает текущий каталог. Если ‘.’ встретилась в начале пути, то она заменится на абсолютный путь текущего каталога. Если ‘.’ встречается внутри пути, то этот символ игнорируется, т.е. «/tmp/./ttt» эквивалентно «/tmp/ttt»;
  • символы «..» – обозначают переход к родительскому каталогу (для корневого каталога родительским для него является он сам же, т.е. «/../..» эквивалентно «/»);
  • символ «~» в начале пути заменяется на абсолютный путь домашнего каталога. Если этот символ встречается внутри пути, то он ничем не отличается от «обычных» символов.

Дублируемые символы ‘/’ игнорируются, т.е. «/var///tmp» эквивалентно «/var/tmp».

Все имена являются регистрозависимыми, т.е. «/tmp» не эквивалентно «/Tmp».

Формат входного файла

С клавиатуры вводятся 4 строки.

Первая строка (не более 100 символов) – абсолютный путь домашнего каталога.

Вторая строка (не более 100 символов) – абсолютный путь текущего каталога.

Третья и четвертая строки (не более 1000 символов каждая) – сравниваемые пути.

Формат выходного файла

Требуется вывести на экран YES в случае эквивалентности анализируемых путей (пути эквивалентны, если указывают на один и тот же файл), NO – в случае неэквивалентности. В случае ошибки (например, домашний каталог задан не абсолютным путем) на экран вывести сообщение ERROR, а в стандартный поток ошибок – описание возникшей ошибки в произвольной форме на английском языке не транслитом (для вывода воспользуйтесь вызовом fprintf(stderr, const char *format, …), описанной также в stdio.h).

Примеры

Ввод Вывод
/home/user
/tmp
./../../home/user/D
~/D
YES

Categories: C, ejudge.

Comment Feed

No Responses (yet)



Some HTML is OK

or, reply to this post via trackback.