#include <iostream>
using namespace std;
#define MaxSize 10
typedef struct{
char data[MaxSize];
int top;
}SqStack;
void InitSqStack(SqStack &S);//初始化顺序栈
bool IsEmpty(SqStack S);//判断是否栈空
bool Push(SqStack &S,char x);//进栈操作
bool Pop(SqStack&S,char &x);//出栈
bool GetTop(SqStack S,char &x);//读取栈顶元素
int Length(SqStack S);//当前栈内元素个数
void Show(SqStack S);//打印栈内元素
bool BrackeMatching(char*string,int len);//括号匹配
void BrackeMatchingTest();//测试函数
int main()
{
BrackeMatchingTest();
}
void InitSqStack(SqStack &S)//初始化顺序栈
{
S.top=-1;
}
bool IsEmpty(SqStack S)//判断是否栈空
{
return(S.top==-1);
}
bool Push(SqStack &S,char x)//进栈操作
{
if(S.top==MaxSize-1)
return false;
S.data[++S.top]=x;
return true;
}
bool Pop(SqStack&S,char &x)//出栈
{
if(S.top==-1)return false;
x=S.data[S.top--];
return true;
}
bool GetTop(SqStack S,char &x)//读取栈顶元素
{
if(S.top==-1)return false;
x=S.data[S.top];return true;
}
int Length(SqStack S)//当前栈内元素个数
{
return (S.top+1);
}
void Show(SqStack S)//打印栈内元素
{
for(int i=0;i<=S.top;i++)
{
cout<<S.data[i]<<"_";
}
cout<<endl;
}
bool BrackeMatching(char*string,int len)//括号匹配
{
char p,q;
SqStack S;
InitSqStack(S);
Push(S,'#');
for(int i=0;i<len;i++)
{
p=string[i];
switch(p)
{
case'(':
case'{':
case'[':
Push(S,p);break;
case')':
Pop(S,q);
if(q!='(')
return false;
break;
case'}':
Pop(S,q);
if(q!='{')
return false;
break;
case']':
Pop(S,q);
if(q!='[')
return false;
break;
default:break;
}
}
Pop(S,q);
if(q!='#')
return false;
return true;
}
void BrackeMatchingTest()//测试函数
{
char*string="[2+(1-3)]*4";
bool ans=BrackeMatching(string,17);
printf("Is the expression '%s' bracket matching? %d \r\n", string, ans);
string = "( ) )";
ans=BrackeMatching(string,6);
printf("Is the expression '%s' bracket matching? %d \r\n", string, ans);
string= "()()(())";
ans=BrackeMatching(string,8);
printf("Is the expression '%s' bracket matching? %d \r\n", string, ans);
string = "({}[])";
ans=BrackeMatching(string,6);
printf("Is the expression '%s' bracket matching? %d \r\n", string, ans);
string = ")(";
ans=BrackeMatching(string,6);
printf("Is the expression '%s' bracket matching? %d \r\n", string, ans);
}
结果