为了账号安全,请及时绑定邮箱和手机立即绑定

我想要用栈实现括号匹配,但是发现pop和push函数有错,请问该怎么办?

我想要用栈实现括号匹配,但是发现pop和push函数有错,请问该怎么办?

梵蒂冈之花 2022-05-27 14:10:29
#include <iostream>#include <string>using namespace std;void push(char a);void pop();void main(){char one[100];char stack[50];char*sp,*buffer;buffer=stack;sp=buffer;cin>>one;do{int n=0;switch(one[n]){case'(': push(one[n]);break;case'[': {if(one[n]='(')cout<<"@@@@@"<<endl;break;if(one[n]='[')cout<<"@@@@@"<<endl;break;push(one[n]);break;}case'{':{if(one[n]='(')cout<<"@@@@@"<<endl;break;if(one[n]='[')cout<<"@@@@@"<<endl;break;if(one[n]='{')cout<<"@@@@@"<<endl;break;push(one[n]);break;}case')':if(stack[n-1]='(')pop();cout<<"@@@@@";break;case']':if(stack[n-1]='[')pop();cout<<"@@@@@";break;case'}':if(stack[n-1]='{')pop();cout<<"@@@@@";break;default: n++;}}while(1);if(buffer){delete buffer;cout<<"栈空间已释放";}void push(char a){if(sp>buffer+50){cout<<"栈空间不够,栈溢出!"<<endl;exit(1);}else*sp++=a;}void pop(){sp--;if(sp<buffer){cout<<"已越过栈底!"<<endl;exit(1);}}
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

sp,buffer要改成全局变量。
sp,buffer指向的是自动变量one,stack,不用delete,程序结束后会自己释放的。
default:n++是不需要的。n++要放在switch的范围外,}while(1)的前面。while(1)要改成while(one[n]!='\0');
if(buffer)
{
delete buffer;
cout<<"栈空间已释放";
}
改成
if(sp==buffer) cout<<"匹配"<<endl;
else cout<<"不匹配"<<endl;
不然你的程序根本不输出是否括号匹配。

查看完整回答
反对 回复 2022-05-30
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信