項目中碰到的問題,用正則不是很好弄,就找了個算法簡單實作了一下。具體問題就是判斷一個表達式的括号是否成對出現,不僅要成對出現而且要正确的成對出現(表達式:[{(}]) 雖然成對出現但是不正确哦!)
算法描述:棧空間存儲,周遊表達式,遇左括号做進棧操作,遇右括号則對比目前符号和棧頂符号是否比對,若比對則做出棧操作,直到最後,棧空則完全比對,否則不比對。
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;
}