通过栈实现括号匹配

首先输入一个待匹配的括号序列,如果是左括号将其压入栈中,如果是右括号则与当前栈顶的括号相匹配(左中括号匹配右中括号,左小括号匹配右小括号)。

若匹配失败,输出匹配失败,程序结束,若匹配成功,将栈顶括号出栈,直到最后一个括号匹配完成。

若最后栈为空输出匹配成功,不为空输出匹配失败。

#include <iostream>
#include <string>
#define MaxSize 100
using namespace std;
typedef char ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int top;
}SqStack;

//栈顶指针指向栈顶元素
void InitStack(SqStack *st) //初始化栈
{
    st->top=-1;//
}

int StackEmpty(SqStack *st) //判断栈为空
{
    return (st->top==-1);
}

void Push(SqStack *st,ElemType x) //元素进栈
{
    if(st->top==MaxSize-1)//判断栈溢出
    {
        printf("栈上溢出!\n");
    }
    else
    {
        st->top++;           //移动栈顶位置
        st->data[st->top]=x; //元素进栈
    }
}

void Pop(SqStack *st,ElemType *e) //出栈
{
    if(st->top==-1)
    {
        printf("栈下溢出\n");
    }
    else
    {
        *e=st->data[st->top]; //元素出栈
        st->top--;           //移动栈顶位置       
    }
}

int main()
{
    SqStack L;
    SqStack *st=&L;
    ElemType e;
    string brackets;
    int i, n, count = 0;//n表示待检验括号的长度
    InitStack(st);
    //scanf("%d",&n);
    //scanf("%s",&brackets);
    cin>>brackets;
    while(count <= brackets.length())
    {
        if(brackets[count] == '[' || brackets[count] == '(')
        {
            //printf("%c\n", brackets);
            Push(st,brackets[count]);
        }
        else if(brackets[count] == ']'  || brackets[count] == ')')
        {
            //printf("%c\n", brackets);
            if( brackets[count] == ']' && (st->data[st->top] == '[') || brackets[count] == ')' &&  (st->data[st->top] == '('))
            {
                Pop(st,&e);
            }
            else 
            {
                printf("匹配失败\n");
                return 0;
            }
        }
            count++;
    }
        //fflush(stdin);
    if(st->top == -1)
        printf("匹配成功\n");
    else 
    {
        printf("匹配失败\n");
    }
} 
posted @ 2017-05-04 21:54  云胡同学  阅读(326)  评论(0编辑  收藏  举报