思路:
在算法中设置一个栈,每读入一个空号
一:若是右括号: '}' ' )' ']'(两种情况):
1:使置于栈顶的最急迫的期待得以消解,需将栈顶元素出栈;
2:不合法的情况,即与栈顶的最急迫的期待不匹配,需将其(括号)压栈;
二:若是左括号:'(' '{' '['
作为一个新的更急迫的期待压栈;
顺序栈的代码不再赘述:点击打开链接
//括号匹配
#include"stack.h"
int main()
{
Stack st;
InitStack(&st);
int flag = 1;
while(flag)
{
/*要测试的一串括号*/
char str[100] ;
cout<<"请输入一串括号:"<<endl;
scanf("%s",str);
char *p = str;//指向字符串数组
char e;
while(*p != '\0')
{
if(*p == '[' || *p == '{' || *p == '(')
{
Push(&st,*p);
p++;
}
else
{
if(*p == ']')
{
if(st.base[st.top - 1] == '[')
Pop(&st,&e);
else
Push(&st,*p);
}
if(*p == ')')
{
if(st.base[st.top - 1] == '(')
Pop(&st,&e);
else
Push(&st,*p);
}
if(*p == '}')
{
if(st.base[st.top - 1] == '{')
Pop(&st,&e);
else
Push(&st,*p);
}
p++;
}
}
if(st.top == 0)
cout<<"括号匹配"<<endl;
else
cout<<"括号不匹配"<<endl;
cout<<"continue:1 break:0"<<endl;
cin>>flag;
}
destory(&st);
return 0;
}
改进后代码:
//括号匹配
#include"stack.h"
int main()
{
Stack st;
InitStack(&st);
int flag = 1;
while(flag)
{
char str[100];
cout<<"请输入一串括号:"<<endl;
scanf("%s",str); //用cin为何是错误的????
char *p = str;
char e;
while(*p != '\0')
{
if(*p == '[' || *p == '{' || *p == '(')
{
Push(&st,*p);
p++;
}
else
{
if( (*p == ']' && st.base[st.top - 1] == '[')
||(*p == '}' && st.base[st.top - 1] == '{')
||(*p == ')' && st.base[st.top - 1] == '(')
)
Pop(&st,&e);
else
Push(&st,*p);
p++;
}
}
if(st.top == 0)
cout<<"括号匹配"<<endl;
else
cout<<"括号不匹配"<<endl;
cout<<"continue:1 break:0"<<endl;
cin>>flag;
}
destory(&st);
return 0;
}