我是C ++的新手,我想用堆栈来评估作为输入给出的表达式(例如2 + 3 * 5 + 4),只包含数字,+和*。我写了这段代码,但它给了我Segmentation故障:11。你能帮我解决这个问题或者给我一个关于可能出错的提示吗?谢谢! (我注意到这个网站上有类似的问题,但我不能用它们来解决我的问题)
#include <iostream>
#include <stack>
using namespace std;
bool highPrecedence(char a, char b){
if((a=='+')&&(b=='*'))
return true;
return false;
}
int main()
{
char c = 'a';
double x;
stack<char> stack;
double v[10];
int i=0;
double res;
while(true)
{
c = cin.get();
if(c=='\n'){
while(stack.size()!=0){
if (stack.top()=='*'){
double res = v[i]*v[i-1];
i--;
v[i]=res;
stack.pop();
}
if (stack.top()=='+'){
res = v[i]+v[i-1];
i--;
v[i]=res;
stack.pop();
}
}
break;
}
if ( '0'<=c && c<='9' )
{
cin.putback(c);
cin>>x;
cout<<"Operand "<<x<<endl;
i=i+1;
v[i]=x;
}
else
{
if(c!=' ') cout<< "Operator " <<c<<endl;
if (stack.size()==0)
stack.push(c);
else{
while((!highPrecedence(stack.top(),c)) && (stack.size()!=0)){
if (stack.top()=='*'){
double res = v[i]*v[i-1];
i--;
v[i]=res;
stack.pop();
}
if (stack.top()=='+'){
res = v[i]+v[i-1];
i--;
v[i]=res;
stack.pop();
}
}
stack.push(c);
}
}
}
cout<<v[0]<<endl;
}
答案 0 :(得分:1)
stack.top()
为空,则使用stack
是非法的
更改while((!highPrecedence(stack.top(),c)) && (stack.size()!=0)){
while((!stack.empty()) && (!highPrecedence(stack.top(),c))){
i
的初始值不好,您正在打印未初始化的变量,该变量具有不确定的值。int i=0;
更改为int i=-1;