注意点
(1)当扫描到右括号时,需要判断下栈是否为空;
(2)当扫描完还未发现错误时,需要判断下栈是否为空,当栈为空时,此时左括号多了,也是不匹配的。
c++代码如下:
#define MaxSize 10
typedef struct SqStack
{
int data[MaxSize];
int top;//栈顶指针,存放着从栈底开始的栈顶元素的值的下标值。
};
void InitStack(SqStack &S);//初始化栈
bool PushStack(SqStack &S, char x);//进栈
bool PopStack(SqStack &S, char &x);//出栈
bool StackEmpty(SqStack &S);//判断栈是否为空
//栈-括号匹配问题
bool bracketcheck(char str[],int length)
{
SqStack S;
InitStack(S);
for (int i = 0; i < length; i++)
{
if (str[i] == '(' || str[i] == '[' || str[i] == '{')
PushStack(S, str[i]);
else
{
if (StackEmpty)
return false;
char x;
PopStack(S, x);
if (x == '('&&str[i] != ')')
return false;
if (x == '['&&str[i] != ']')
return false;
if (x == '{'&&str[i] != '}')
return false;
}
}
return StackEmpty(S);
}