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

#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);
}
}

梵蒂冈之花
浏览 121回答 1
1回答

BIG阳

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;不然你的程序根本不输出是否括号匹配。
打开App,查看更多内容
随时随地看视频慕课网APP