概述
首先输入一个待匹配的括号序列,如果是左括号将其压入栈中,如果是右括号则与当前栈顶的括号相匹配(左中括号匹配右中括号,左小括号匹配右小括号)。
若匹配失败,输出匹配失败,程序结束。若匹配成功,将栈顶括号出栈,直到最后一个括号匹配完成。判断最后栈的状态
为空输出匹配成功不为空输出匹配失败
代码
#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;
InitStack(st
);
cin
>>brackets
;
while(count
<= brackets
.length())
{
if(brackets
[count
] == '[' || brackets
[count
] == '(')
{
Push(st
,brackets
[count
]);
}
else if(brackets
[count
] == ']' || brackets
[count
] == ')')
{
if( brackets
[count
] == ']' && (st
->data
[st
->top
] == '[') || brackets
[count
] == ')' && (st
->data
[st
->top
] == '('))
{
Pop(st
,&e
);
}
else
{
printf("匹配失败\n");
return 0;
}
}
count
++;
}
if(st
->top
== -1)
printf("匹配成功\n");
else
{
printf("匹配失败\n");
}
}