这是写的括号匹配的算法,用了三个堆栈:
#include"LinkedStack.h"
#include<string.h>
////////////////////////////////////////////////
//bracketMatch()函数
表达式圆,方,花括号匹配
////////////////////////////////////////////////
bool bracketMatch()
{
//定义三个分别用于存放圆,方,花三中括号的堆栈
LinkedStack<char> LS1;
LinkedStack<char> LS2;
LinkedStack<char> LS3;
//存放输入的表达式字符串
char* exp=new char[50];
cout<<"请输入要进行括号匹配的表达式:";
cin>>exp;
char t;//暂存取出的括号字符
char x;//暂存弹出的括号字符
//对表达式中的三种括号进行匹配
for(unsigned i=0;i<=strlen(exp)-1;i++)
{
t=exp[i];
//如果都是左括号,则全部压入堆栈
if(t=='(')
LS1.Push(t);
else if(t=='[')
LS2.Push(t);
else if(t=='{')
LS3.Push(t);
//如果是右括号,则全部弹栈进行匹配
//在弹栈前如果有一个堆栈为空,则说明不匹配
else if(t==')')
{
if(LS1.IsEmpty())
{
cout<<"不匹配!"<<endl;
return false;
}
LS1.Pop(x);
}
else if(t==']')
{
if(LS2.IsEmpty())
{
cout<<"不匹配!"<<endl;
return false;
}
LS2.Pop(x);
}
else if(t=='}')
{
if(LS3.IsEmpty())
{
cout<<"不匹配!"<<endl;
return false;
}
LS3.Pop(x);
}
else
//继续循环
continue;
}
//如果三个括号栈都已经为空了则说明匹配
if(LS1.IsEmpty() && LS2.IsEmpty() && LS3.IsEmpty())
{
cout<<"匹配!"<<endl;
return true;
}
//有一个不空都不能匹配
else
{
cout<<"不匹配!"<<endl;
return
false;
}
};
//////////////////////////bracketMatch()函数结束