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

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

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

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

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

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. namespace JustForFun
  4. {
  5.     class MainClass
  6.     {
  7.         static void Main ()
  8.         {
  9.             // Просто прогон тестов
  10.             Console.WriteLine ("Результат: " + TryParse ("([]([()]))"));
  11.             Console.WriteLine ("Результат: " + TryParse (")("));
  12.             Console.WriteLine ("Результат: " + TryParse ("[(])"));
  13.             Console.WriteLine ("Результат: " + TryParse ("[()]([])"));
  14.            
  15.             Console.ReadLine ();
  16.         }
  17.  
  18.         const string openBrackets = "([";
  19.         const string closeBrackets = ")]";
  20.  
  21.         static bool TryParse (string expression)
  22.         {
  23.             // Инициализация стека
  24.             Stack<char> stack = new Stack<char> ();
  25.            
  26.             int index;
  27.             foreach (var symbol in expression)
  28.             {
  29.                 // Если очередной символ - открывающая скобка
  30.                 // Дословно если удается найти символ в строке "openBrackets"
  31.                 if (openBrackets.IndexOf (symbol) != -1)
  32.                 {
  33.                     // Добавляем открывающуюся скобку в стек
  34.                     stack.Push (symbol);
  35.                 }
  36.                 // Если очередной символ - закрывающая скобка
  37.                 else if ((index = closeBrackets.IndexOf (symbol)) != -1)
  38.                 {
  39.                     // Если стек не пуст и последнее добавленная в него открывающаяся скобка
  40.                     // соответствует текущей закрывающейся скобке
  41.                     if (stack.Count != 0 && stack.Peek () == openBrackets[index])
  42.                     {
  43.                         // Удалить последнюю открывающуюся скобку из стека.
  44.                         stack.Pop ();
  45.                     }
  46.                 }
  47.                 // Если какой - то левый символ
  48.                 else
  49.                 {
  50.                     return false;
  51.                 }
  52.             }
  53.             return stack.Count == 0;
  54.         }
  55.     }
  56. }

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


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

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

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы