#include <iostream> #include <stack> #include <string> using namespace std; short judge(char c) { switch(c) { case '(': case '[': case '{': return -1;//开放符号,即左括号 case ')': case ']': case '}': return 1;//封闭符号,即右括号 default: return 0;//其他符号 } } bool match(char a,char b) { switch(b) { case ')': return (a == '(')? true : false; case ']': return (a == '[')? true : false; case '}': return (a == '{')? true : false; default: return false; } } int main() { string input; char c; stack<char> Stack; cout << "输入一个字符串:"; cin >> input; string::iterator p = input.begin(); while(p != input.end()) { c = *p; switch(judge(c)) { case -1: Stack.push(c); break; case 0: break; case 1: if(Stack.empty() == true) cerr << "缺少左括号!" << endl; if(match(Stack.top(),c) == true) Stack.pop(); else { cerr << "括号不匹配!" << endl; return 0; } } ++p; } if(Stack.empty() == false) cerr << "缺少右括号!" << endl; else cout << "匹配成功!" << endl; return 0; } 思路:做一个空栈,读入字符直至文件尾。如果字符是一个开放符号,则将其压入栈中。如果字符是一个封闭符号,那么若栈为空,则报错;若栈不为空,则将栈元素弹出。如果弹出的符号不是对应的开放符号,则报错。在文件尾,如果栈非空则报错。