c++里面的表达式括号匹配问题,求高手看看下面的代码哪里有问题

2025-03-27 19:12:54
推荐回答(1个)
回答1:

#include
#include"SqStack.h"
using namespace std;
int A(int n){
SqStacks1(80);
char s2[80];
cout<<"输入表达式:";
for(int i=0;i cin>>s2[i];
for( i=0;i switch(s2[i]) {
case '(': ;
case '[': ;
case '{': s1.Push(s2[i]); break;
case ')': if(s1.StackEmpty( ) || s1.GetTop( ) != '(') return 0;
s1.Pop( ); break;
case ']': if(s1.StackEmpty( ) || s1.GetTop( ) != '[') return 0;
s1.Pop( ); break;
case '}': if(s1.StackEmpty( ) || s1.GetTop( ) != '{') return 0;
s1.Pop( ); break;
} //end switch
} //end for
return s1.StackEmpty( );
} // end A

每次在做取栈顶元素或出栈操作之前最好先判断栈是否为空。用1+(2+3))测试你的程序,遇到第二个')'时,此时栈已经是空栈,但你的程序此时还执行s1.GetTop( )操作,这时可能访问栈越界了。