Написать алгоритм проверки корректности регулярного выражения - C#

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

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

Следующая задача. Есессно на шарпе) написать алгоритм проверки корректности регулярного выражения, которое включает [,],(,) т.е, например ([][[]()]) - правильно, ([][]()]) - неправильно

Решение задачи: «Написать алгоритм проверки корректности регулярного выражения»

textual
Листинг программы
using System;
using System.Collections.Generic;
namespace JustForFun
{
    class MainClass
    {
        static void Main ()
        {
            // Просто прогон тестов
            Console.WriteLine ("Результат: " + TryParse ("([]([()]))"));
            Console.WriteLine ("Результат: " + TryParse (")("));
            Console.WriteLine ("Результат: " + TryParse ("[(])"));
            Console.WriteLine ("Результат: " + TryParse ("[()]([])"));
            
            Console.ReadLine ();
        }
 
        const string openBrackets = "([";
        const string closeBrackets = ")]";
 
        static bool TryParse (string expression)
        {
            // Инициализация стека
            Stack<char> stack = new Stack<char> ();
            
            int index;
            foreach (var symbol in expression) 
            {
                // Если очередной символ - открывающая скобка
                // Дословно если удается найти символ в строке "openBrackets"
                if (openBrackets.IndexOf (symbol) != -1) 
                {
                    // Добавляем открывающуюся скобку в стек
                    stack.Push (symbol);
                }
                // Если очередной символ - закрывающая скобка
                else if ((index = closeBrackets.IndexOf (symbol)) != -1) 
                {
                    // Если стек не пуст и последнее добавленная в него открывающаяся скобка 
                    // соответствует текущей закрывающейся скобке 
                    if (stack.Count != 0 && stack.Peek () == openBrackets[index]) 
                    {
                        // Удалить последнюю открывающуюся скобку из стека.
                        stack.Pop ();
                    }
                } 
                // Если какой - то левый символ
                else 
                {
                    return false;
                }
            }
            return stack.Count == 0;
        }
    }
}

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


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

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

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