这是一个考察对堆栈概念理解的应用,输入一串带括号的式子,检查其中的括号是否前后对应。思路是当遇到括号是入栈,并在下次遇到括号时检测是否与上一个入栈的括号匹配为一对,不是则继续入栈。因为正确的式子最终总能遇到一个匹配的括号。例如:{3+a+[1+b+c*(1+2)]+3},可以最先检测出()这一对小括号,然后出栈,下一个待匹配括号[与]也可成功匹配。
#include<iostream> #include<stack> #include <string> using namespace std; int main() { string str; int len,num; cin >> num; for(int j=1;j<=num;j++) { int error=0; cin>> str; len=str.length(); stack<char> s; for(int i=1;i<=len;i++) { if(str[i-1]=='('||str[i-1]=='['||str[i-1]=='{') { s.push(str[i-1]); } switch(str[i-1]) { case ')': if(s.empty()) { error = 1; } else { if(s.top()=='(') { s.pop(); } else { error = 1; } } break; case ']': if(s.empty()) { error = 1; } else { if(s.top()=='[') { s.pop(); } else { error = 1; } } break; case '}': if(s.empty()) { error = 1; } else { if(s.top()=='{') { s.pop(); } else { error = 1; } } break; } } if((s.empty())&&(error!=1)) { cout<<"ok"<<endl; } else { cout<<"error"<<endl; } } return 0; }