В нелинейном списке найти заданный элемент. Результат выдать в виде линейного списка - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. У меня есть задача: В нелинейном списке найти заданный элемент (м.б., не атом). Результат выдать в виде линейного списка (отдельный список для каждого вхождения), каждый элемент которого является индексом очередного сегмента поиска. Если элемент не найден, выдать 0. Проблема: Я решила подавать сложный список как строку и парсить ее потом для поиска. Так вот, никак не удается разработать хороший алгоритм для этого. Все время теряется уровень или списки путаются с простыми элементами. Нужен функциональный подход, а не ООП. Помогите пожалуйста, если у кого есть идеи или кто встречался с подобными задачами. Спасибо.

Решение задачи: «В нелинейном списке найти заданный элемент. Результат выдать в виде линейного списка»

textual
Листинг программы
        static IEnumerable<string> FindElement(ref string input) {
            var level = 0;
            var currentPosition = 0;
            var positions = new List<int> { 0 };
            var result = new List<string> { "(" };
            foreach (var simbol in input.Skip(1).Take(input.Length - 2)) {
                switch (simbol) {
                    case ')':
                        currentPosition = positions[--level];
                        break;
                    case '(':
                        positions.Add(0);
                        positions.Insert(level, currentPosition + 1);
                        currentPosition = 0;
                        level++;
                        break;
                    case '*':
                        currentPosition++;
                        for (var i = 0; i < level; ++i) {
                            result.Add("(");
                            result[i] += " " + positions[i];
                        }
                        result[level] += " " + currentPosition;
                        break;
                    case ' ':
                        break;
                    default:
                        currentPosition++;
                        break;
                }
            }
            return result;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы