Контест Middle net/http и middleware обновлено

Разбор query-строки URL с декодированием на Go

Условие

Разберите строки запроса URL. Правила как у url.ParseQuery:

  • строка делится на части по &, пустые части пропускаются;
  • часть делится на ключ и значение по первому =; если = нет, значение пустое;
  • в ключе и значении + означает пробел, %XX (две шестнадцатеричные цифры, регистр любой) означает байт с этим кодом;
  • %, за которым нет двух шестнадцатеричных цифр, делает всю строку ошибочной.

Ввод: n (1 ≤ n ≤ 500), затем n строк (могут быть пустыми). Символов ; и # в строках нет.

Вывод: для каждой строки пары ключ=значение по одной в строке: ключи по возрастанию (побайтово), значения одного ключа в порядке появления. Если строка ошибочная, вместо пар выведите error. После каждой строки ввода выведите --. Проверка построчная.

Пример

3
a=1&b=2&a=3
q=go+lang&lang=%D1%80%D1%83
x=%zz&y=1
a=1
a=3
b=2
--
lang=ру
q=go lang
--
error
--

Как подойти

url.ParseQuery или ручной разбор: split по &, Cut по =, декодирование + и %XX.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме