首先输入一个待匹配的括号序列,如果是左括号将其压入栈中,如果是右括号则与当前栈顶的括号相匹配(左中括号匹配右中括号,左小括号匹配右小括号)。
若匹配失败,输出匹配失败,程序结束,若匹配成功,将栈顶括号出栈,直到最后一个括号匹配完成。
若最后栈为空输出匹配成功,不为空输出匹配失败。
#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");
}
}