括号匹配-栈


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

  

posted @ 2022-06-30 17:18  Hi,小董先生  阅读(66)  评论(0)    收藏  举报