Check the syntax of the mathematical expression
using System;
using System.Collections.Generic;
namespace checkMathExpression
{
class Program
{
static void Main(string[] args)
{
bool error = false;
var str = "( a[i]+{-1}*(8-9) )";
Stack<char> stack = new Stack<char>();
foreach (var item in str.ToCharArray())
{
if (item == '(' || item == '{' || item == '[')
{
stack.Push(item);
}
else if (item == ')' || item == '}' || item == ']')
{
if (stack.Peek() != GetComplementBracket(item))
{
error = true;
break;
}
}
}
if (error)
Console.WriteLine("Incorrect brackets");
else
Console.WriteLine("Brackets are fine");
Console.ReadLine();
}
private static char GetComplementBracket(char item)
{
switch (item)
{
case ')':
return '(';
case '}':
return '{';
case ']':
return '[';
default:
return ' ';
}
}
}
}
Another Implementation
using System;
using System.Collections.Generic;
namespace Calculator
{
class Program
{
static void Main(string[] args)
{
string[] values = new string[] { "2", "{}[]()", "{[}]}" };
var res = braces(values);
for (int res_i = 0; res_i < res.Length; res_i++)
{
Console.WriteLine(res[res_i]);
}
Console.Read();
}
static string[] braces(string[] values)
{
bool error = false;
Stack<char> stack = new Stack<char>();
List<string> output = new List<string>();
foreach (var str in values)
{
int n;
bool isNumber = int.TryParse(str, out n);
if (!isNumber)
{
foreach (var item in str.ToCharArray())
{
if (item == '(' || item == '{' || item == '[')
{
stack.Push(item);
}
else if (item == ')' || item == '}' || item == ']')
{
if (stack.Peek() != CheckCorrectness(item))
{
error = true;
break;
}
}
}
if (error)
output.Add("NO");
else
output.Add("YES");
}
}
return output.ToArray();
}
private static char CheckCorrectness(char item)
{
switch (item)
{
case ')':
return '(';
case '}':
return '{';
case ']':
return '[';
default:
return ' ';
}
}
}
}