Advertisement
stanevplamen

02.8.03.BracketsChecker01

Jun 13th, 2013
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.27 KB | None | 0 0
  1. using System;
  2. using System.Text;
  3. using System.Text.RegularExpressions;
  4.  
  5. class BracketsCheckerSearch
  6. {
  7.     static bool BracketsChecker(string expression)
  8.     {
  9.         bool sign = true;
  10.         int counter = 0;
  11.         char open = '(';
  12.         char close = ')';
  13.         for (int i = 0; i < expression.Length; i++)
  14.         {
  15.             if (expression[i] == open)
  16.             {
  17.                 counter++;
  18.                 continue;
  19.             }
  20.             else if (expression[i] == close)
  21.             {
  22.                 if (counter == 0)
  23.                 {
  24.                     sign = false;
  25.                     break;
  26.                 }
  27.                 else
  28.                 {
  29.                     counter--;
  30.                 }
  31.             }
  32.         }
  33.         return sign;
  34.     }
  35.  
  36.     static void Main()
  37.     {
  38.         // solution which allows nesting of brackers (works for () brackers)
  39.         string expressionSearch = "((a+b)/(5-5))";
  40.         bool correctBrackets = BracketsChecker(expressionSearch);
  41.         Console.WriteLine("The bracketrs of {0} are correnct? {1}", expressionSearch, correctBrackets);
  42.  
  43.         // solution with regex which can not be used for nested brackets (works for [] brackers)
  44.         string expressionRegex = "[a+b]/[5-5]";
  45.         bool correctBracketsRegex = BracketsCheckerRegex.BracketsChecker(expressionRegex);
  46.         Console.WriteLine("The bracketrs of {0} are correnct? {1}", expressionRegex, correctBracketsRegex);
  47.     }
  48. }
  49.  
  50. public class BracketsCheckerRegex
  51. {
  52.     public static bool BracketsChecker(string expression)
  53.     {
  54.         Regex expressionRegex = new Regex(@"^([^[\]]*\[[^[\]]*\]){0,3}[^[\]]*$");
  55.         bool sign = expressionRegex.IsMatch(expression);
  56.         return sign;
  57.     }
  58. }
  59.  
  60. /* Обяснение за regex формата:
  61.     (...){0,3} работи за до три повторения на следните под-изрази:
  62.         [^[\]]* за всеки символ който не е скоба
  63.         \[ за всяка отваряща скоба [
  64.         [^[\]]* за всеки символ който не е скоба
  65.         \] за всяка затваряща скоба ]
  66.     отново, [^[\]]* за всеки символ който не е скоба след скобите
  67. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement