括号匹配-栈
【问题描述】
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,但需要成对出现。即([]( )或[([ ][ ])]等为正确的格式, [(])或([())或(()])均为不正确的格式。 给定一串括号输入(换行作为结束符),检测格式是否正确,若正确输出yes;错误输出no。
【样例输入】
([]( ))
【样例输出】
yes
#include<iostream> #include<cstring> using namespace std; char stack[100], a[100]; int top=0; void push(char x){ if(top<strlen(a)){ // 此处注意:计算的是原数组的长度。 top++; stack[top]=x; cout<<"入栈顺序:"<<stack[top]<<" "<<endl; return; } } void pop(){ if(top>0){ cout<<"出栈顺序:"<<stack[top]<<" "<<endl; top--; return; } } int getTop(){ return top; } int main(){ // 输入括号: cin>>a; for(int i=0; i<strlen(a); i++){ if(a[i]=='('||a[i]=='['){ // 入栈规则:(([()]))、()[()]、[)、(()]) push(a[i]); }else if( (a[i]==')'&&stack[top]=='(') || (a[i]==']'&&stack[top]=='[') ){ // 出栈规则: pop(); }else{ // 输入的括号不满足入栈和出栈规则,不能再继续循环下去了!!! break; } cout<<"栈顶:"<<getTop()<<" "<<endl; } if(getTop()==0){ cout<<"yes"; }else{ cout<<"no"; } return 0; }
#include<iostream> #include<cstring> #include<stack> using namespace std; stack<int>s; int main(){ char a[100]; cin>>a; for(int i=0; i<strlen(a); i++){ // 入栈: if(a[i]=='('||a[i]=='['){ s.push(a[i]); } // 出栈:((] else if(s.top()=='('&&a[i]==')'||s.top()=='['&&a[i]==']'){ s.pop(); } else{ cout<<"no"; return 0; } } if(s.empty()){ cout<<"yes"; }else{ cout<<"no"; } return 0; }