括号匹配-栈
【问题描述】
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,但需要成对出现。即([]( )或[([ ][ ])]等为正确的格式, [(])或([())或(()])均为不正确的格式。 给定一串括号输入(换行作为结束符),检测格式是否正确,若正确输出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;
}

浙公网安备 33010602011771号