题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
输入
多组数据
每组是一个由'(',')','{','}','[',']' 组成的括号序列
每组字符串长度不超过50。
输出
如果有效输出true, 否则输出false。
样例输入
()
()[]{}
(]
([)]
{[]}
样例输出
true
true
false
false
true
#include<iostream> using namespace std; #include<string.h> class Stack{ private: char *p; int top; int maxsize; public: Stack(int size) { top=-1; maxsize=size; p=new char[size]; } bool IsEmpty(){return (top==-1)?true:false;} bool IsFull(){return (top==maxsize-1)?true:false;} bool Push(char &x) { if(IsFull()) return false; p[++top]=x; return true; } bool Pop(char &x) { if(IsEmpty()) return false; x=p[top--]; } }; int main() { char str[51]; while(cin>>str) { Stack *p1=new Stack(50); Stack *p2=new Stack(50); char current=0; for(int i=0;i<strlen(str);i++) { if(str[i]!=current) { p1->Push(str[i]); if(current!=0) p2->Push(current); switch(str[i]) { case'[': current=']'; break; case'{': current='}'; break; case'(': current=')'; break; } } else { char elem; p1->Pop(elem); p2->Pop(current); } } if(p1->IsEmpty()) cout<<"true"<<endl; else cout<<"false"<<endl; delete p1; delete p2; } return 0; }