项目中碰到的问题,用正则不是很好弄,就找了个算法简单实现了一下。具体问题就是判断一个表达式的括号是否成对出现,不仅要成对出现而且要正确的成对出现(表达式:[{(}]) 虽然成对出现但是不正确哦!)
算法描述:栈空间存储,遍历表达式,遇左括号做进栈操作,遇右括号则对比当前符号和栈顶符号是否匹配,若匹配则做出栈操作,直到最后,栈空则完全匹配,否则不匹配。
static bool IsBracketsMatch(string matchStr)
{
Stack<char> stack = new Stack<char>();
for (int i = 0; i < matchStr.Length; i++)
{
char current = matchStr[i];
switch (current)
{
case '(':
case '[':
case '{':
stack.Push(current);
break;
case ')':
case ']':
case '}':
if (stack.Count <= 0)
{
return false;
}
else
{
char top = stack.Peek();
if (IsCouple(top, current))
{
stack.Pop();
}
else
{
return false;
}
}
break;
default:
break;
}
}
if (stack.Count <= 0) return true;
return false;
}
static bool IsCouple(char left,char right)
{
if (left == '(' && right == ')')
{
return true;
}
if (left == '[' && right == ']')
{
return true;
}
if (left == '{' && right == '}')
{
return true;
}
return false;
}