设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法判断其中的括号是否匹配。
问题:当输入{()}时程序提示不匹配,改了半天不知道咋改,有专家帮帮忙么
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef char Element;
struct stack
{
Element *data;
int top=-1;
};
bool is(stack s)
{
if(s.top==-1)
return true;
else
return false;
}
void push(stack &s,Element data)
{
++s.top;
s.data=new Element;
s.data[s.top]=data;
}
void pop(stack &s,Element &data)
{
if(is(s)!=true)
{
data=s.data[s.top];
s.top--;
}
}
int compare(Element *str)
{
int count=0;
Element data;
stack s;
while(str[count]!=NULL)
{
switch(str[count])
{
case'(':
push(s,str[count]);
break;
case'[':
push(s,str[count]);
break;
case'{':
push(s,str[count]);
break;
case')':
pop(s,data);
if(data!='(')
return 0;
break;
case']':
pop(s,data);
if(data!='[')
return 0;
break;
case'}':
pop(s,data);
if(data!='{')
return 0;
break;
}
count++;
}
if(is(s)==true)
return 1;
else
return 0;
}
int main()
{
Element *str;
int length,result;
cout<<"请输入算术表达式的长度:";
cin>>length;
cout<<endl;
str= new Element(length);
cout<<"请输入算法表达式:";
for(int i=0;i<length;i++)
cin>>str[i];
result=compare(str);
switch(result)
{
case 0:
cout<<"算法表达式中括号不匹配"<<endl;
break;
case 1:
cout<<"算法表达式中括号匹配"<<endl;
break;
}
system("pause");
return 0;
}