括号匹配 栈 c++

问题描述:

假设一个算术表达式中可以包含三种括号:圆括号“()”,方括号“【】”及花括号“{}”,且这三种括号可以任意次序嵌套。编写算法判断给定表达式中所含括号是否配对出现。

解答:

假设表达式已存入字符数组A【n】中,具体算法如下:

#include <iostream>
using namespace std;

char S[99];//栈保存{,(,[
int top;
int flag;
int Prool(char A[],int n)//匹配算法
{
     top=-1;
    int i=0;
     flag=1;
    while(i<n&&flag)
    {
        if(A[i]=='('||A[i]=='['||A[i]=='{')
            S[++top]=A[i];
        else
        {
            switch(A[i])
            {
            case ')':
                if(top==-1||S[top--]!='(')
                    flag=0;
                break;
            case ']':
                if(top==-1||S[top--]!='[')
                    flag=0;
                break;
            case '}':
                if(top==-1||S[top--]!='{')
                    flag=0;
                break;
            }
        }
        if(top!=-1&&i==n-1)//判断类似[[[[]]的情况
            flag=0;
    i++;
    }
    return flag;
}

int main()
{
    int n;
    while(cin>>n)
    {
        getchar();
        char *A=new char[n];
        int i;
        for( i=0;i<n;i++ )
            cin>>A[i];
        int ret=Prool(A,n);
        cout<<"ret:"<<ret<<endl;
        if(ret)
            cout<<"right"<<endl;
        else
            cout<<"error"<<endl;
        delete []A;
    }
    return 0;
}

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/qq_39993896/article/details/79116303
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞