算法思路:
建立一个栈,顺序对表达式进行扫描,如遇到‘(’,‘【’,‘{’,左半边括号将其入栈,遇到右半边括号,检查当前栈顶元素是否对应,对应就出栈,不对应则不匹配。
Ps:主要注意出栈与入栈对栈顶的操作的先后顺序。
#include <iostream>
using namespace std;
typedef struct{
char data[1000];
int top;
}stack;
void Init_Stack(stack *s)
{
s->top=0;
}
int Push_Stack(stack *s,char x)
{
s->data[s->top]=x;
s->top++;
return 1;
}
int Pop_Stack(stack *s,char *x)
{
if(s->top==0) return 0;
*x=s->data[s->top-1];
s->top--;
return 1;
}
int main(int argc, char *argv[])
{
char data[1000];
int i,j;
stack s;
char x;
Init_Stack(&s);
cout<<"输入表达式"<<endl;
cin>>data;
for(i=0;i<strlen(data);i++)
{
if(data[i]=='('||data[i]=='['||data[i]=='{')
{
Push_Stack(&s,data[i]);
}
if(data[i]==')')
{
Pop_Stack(&s,&x);
if(x!='(')
{
cout<<"erro"<<endl;
return 0;
}
}
if(data[i]==']')
{
Pop_Stack(&s,&x);
if(x!='[')
{
cout<<"erro"<<endl;
return 0;
}
}
if(data[i]=='}')
{
Pop_Stack(&s,&x);
if(x!='{')
{
cout<<"erro"<<endl;
return 0;
}
}
}
cout<<"yes"<<endl;
return 0;
}