#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;
不然你的程序根本不输出是否括号匹配。
添加回答
举报
0/150
提交
取消