【问题描述】用char型栈,解决括号匹配问题
【输入形式】以#为结束符的一个符号序列
【输出形式】如果所有的左右括号全部匹配,输出1;否则输出0
【样例输入】{([])}()#
【样例输出】1
代码实现
#include<iostream>
using namespace std;
struct stack
{
int top;
char elem[20];
};
void initstack(stack *lsy)
{
lsy->top=-1;
}
void push(stack *lsy,char e)
{
lsy->top++;
lsy->elem[lsy->top]=e;
}
bool pop(stack *lsy)
{
if(lsy->top==-1)
{
return false;
}
else
{
lsy->top--;
return true;
}
}
char gettop(stack *lsy,char e)
{
if(lsy->top==-1)
{
return 0;
}
else
{
e=lsy->elem[lsy->top];
return e;
}
}
int main()
{
stack *lsy;
lsy=new stack;
initstack(lsy);
char ch[20],e;
cin>>ch;
for(int i=0;;i++)
{
if(ch[i]=='#')
break;
switch(ch[i])
{
case '(':
case '[':
case '{':
push(lsy,ch[i]);
break;
case ')':
case ']':
case '}':
if(lsy->top==-1)
{
cout<<"0";
return 0;
}
else
{
e=gettop(lsy,e);
if(ch[i]-e==1||ch[i]-e==2)
{
pop(lsy);
}
else
{
cout<<"0";
return 0;
}
}
}
}
if(lsy->top==-1)
cout<<"1";
else
cout<<"0";
return 0;
}