后缀表示法堆栈C ++

时间:2016-03-05 13:26:30

标签: c++ stack

我是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;
}

1 个答案:

答案 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;