1.题目:
Problem Description
任意输入一个由若干个圆括号、方括号和花括号组成的字符串,设计一个算法判断该串中的括号是否配对。
Input
有多组数据,每组为一个包含3类括号的字符串,串长不超过100。
Output
若该串中的括号匹配输出1,否则输出0。
Sample Input
([{}])
([{}})
([{)]}
Sample Output
1
0
0
2.参考代码:
#include <iostream> #include <string.h> using namespace std; class SeqStack{ ///顺序栈 private: char data[1111]; int top; public: SeqStack(){ top=-1; } ~SeqStack(){ } void Push(char x){ data[++top]=x; } char GetTop(){ return data[top]; } void Pop(){ if(top!=-1) top--; } bool empty(){ if(top==-1) return true; else return false; } }; int main() { char s[1111]; int i,len; while(gets(s)) { len=strlen(s); SeqStack w; for(i=0;i<len;i++) { if(s[i]=='(' || s[i]=='[' || s[i]=='{') w.Push(s[i]); ///若遇到左圆括号,左花括号,左方括号,则直接入栈 else if(s[i]==')') ///遇到右圆括号 { if(!w.empty()) ///若不为空 { if(w.GetTop()=='(') ///就判断栈顶是否为左圆括号 w.Pop(); ///是的话,就将栈顶的左圆括号出栈 else w.Push(s[i]); ///否则当前元素入栈 } else w.Push(s[i]); ///当前元素入栈 } else if(s[i]=='}') ///遇到右花括号和上面的同理 { if(!w.empty()) { if(w.GetTop()=='{') w.Pop(); else w.Push(s[i]); } else w.Push(s[i]); } else if(s[i]==']') ///遇到右方括号和上面的同理 { if(!w.empty()) { if(w.GetTop()=='[') w.Pop(); else w.Push(s[i]); } else w.Push(s[i]); } } if(w.empty()) ///若遍历完整个字符串后,栈为空则说明匹配成功 cout<<1<<endl; else cout<<0<<endl; ///否则不成功 } return 0; }