括号匹配问题[有错]
#include<iostream.h> #include<stdlib.h>
#include<malloc.h>
const int MaxSize=100;
const int increment=10;
struct SqStack{//建立栈的结构体
int *base;
int *top;
int stacksize;
};
bool InitStack(SqStack &S,int ms){//初始化栈
S.base=(int *)malloc(MaxSize*sizeof(int));
if(!S.base) return false;
S.top=S.base;
S.stacksize=ms;
return true;
}
bool Push(SqStack &S,int e){//压栈
if(S.top-S.base>=MaxSize){
S.base=(int *)realloc(S.base,(S.stacksize+increment)*sizeof(int));
if(!S.base) return false;
S.top=S.base+S.stacksize;
S.stacksize+=increment;
}
*S.top++=e;
return true;
}
int Pop(SqStack &S){//出栈
if(S.top==S.base) return 0;
int e=*--S.top;
return e;
}
bool StackEmpty(SqStack S){//判断栈是否是空
if(S.top==S.base){
return true;
}
return false;
}
int GetTop(SqStack S){//读栈顶元素
if(S.top==S.base) return false;
char e=*(S.top-1);
return e;
}
bool correct(SqStack &R){//括号匹配的程序
char exp[81];//exp[]存放键盘输入元素
InitStack(R,10);
cout<<"輸入6個字符:";
cin.getline(exp,10);//扫描键盘输入元素
int i=0;
while(exp[i]){
char ch=exp[i];
i++;
switch(ch){
case'{':
case'[':
case'(':
Push(R,ch);//遇到任意作括弧,进栈
break;
case'}'://遇到右括弧,判断是否匹配
if(!StackEmpty(R)&&GetTop(R)=='{')
Pop(R);
else
return false;//不匹配,返回false
break;
case']':
if(!StackEmpty(R)&&GetTop(R)=='[')
Pop(R);
else return false;
break;
case')':
if(!StackEmpty(R)&&GetTop(R)=='(')
Pop(R);
else return false;
}
}
if(StackEmpty(R)) return true;//判断栈空,空则说明全部匹配
else return false;
}
void main(){ SqStack W;
correct(W);
}