#include #include using namespace std; #include "LinkStack.h" bool match(string exp) { SNode* S; InitStack(S); int flag = 1, i = 0; char ch, e, x; ch = exp[i++]; while (ch != '#' && flag) { switch (ch) { case '[': case '(': cout << "左括号进栈!" << endl; Push(S, ch); break; case ')': GetTop(S, e); if (!StackEmpty(S) && e == '(') { Pop(S, x); cout << "右括号出栈!" << endl; } else flag = 0; break; case ']': GetTop(S, e); if (!StackEmpty(S) && e == '[') Pop(S, x); else flag = 0; break; } ch = exp[i++]; } if (StackEmpty(S) && flag) return true; else return false; } int main() { int flag; string exp; cout << "请输入待匹配的表达式,以“#”结束:" << endl; cin >> exp; flag = match(exp); if (flag) cout << "括号匹配成功!" << endl; else cout << "括号匹配失败!" << endl; return 0; }