На вход программе подается строка текста. На выход нужно вернуть массив полей, извлечённых из входа, либо пустой массив если полей нет.
Поля могут быть двух типов:
Простые поля
Не могут быть пустыми, не могут содержать пробелов и разделяются одним или несколькими пробелами.
Поля в кавычках
Могут содержать пробелы и быть пустыми. То есть строка a "bcd ef" 'x y'
содержит три поля a
, bcd ef
и x y
, а не пять.
Кавычки разных типов могут быть вложенными. То есть строка "a 'b' 'c' d" '"1" "2" "3"'
содержит два поля a 'b' 'c' d
и "1" "2" "3"
.
Поля, заключенные в кавычки, могут не отделяться от других полей пробелами. То есть строка a"b c d e"f
содержит 3 поля a
, b c d e
и f
.
Если в строке отсутствует последняя парная закрывающая кавычка, считать, что соответствующее поле заканчивается в конце строки. То есть строка abc "def g h
содержит два поля.
Поле внутри кавычек может содержать символы кавычек, экранированные символом ‘\’. Символ ‘\’ также может быть экранирован самим же собой. То есть строка "a \"c\""
содержит одно поле, а строка "\\" b
— два поля.
В простых полях символ ‘\’ не считается экранирующим символом, поэтому строка \\
— это одно поле из двух слэшей, а \"a b\"
— это два поля \
и a b"
Игнорируйте пробелы в начале или в конце строки, если они не входят в поле.
Задача
В этой задаче вам не нужно реализовывать алгоритм. Вместо этого напишите набор тестов, который покрывает все основные ситуации для данной задачи.
Используйте метод Test(string input, string[] expectedOutput)
который принимает первым аргументом входные данные, а вторым ожидаемый вывод.
Не пишите сложных тестов, которые проверяют сразу много различных свойств алгоритма. Если такой тест падает, то сложно понять в чем на самом деле была ошибка.
1 2 |
public static void RunTests() { |
Стоимость решения этой задачи всего 100 рублей, купи решения у меня 🙂