括号匹配-栈


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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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 @   Hi,小董先生  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示