用逆波兰表示法计算算术表达式的值。这段代码有啥错误,只有一个测试用例给了我错误的答案

Posted

技术标签:

【中文标题】用逆波兰表示法计算算术表达式的值。这段代码有啥错误,只有一个测试用例给了我错误的答案【英文标题】:Evaluate the value of an arithmetic expression in Reverse Polish Notation. what is the error in this code , only one test case is giving me wrong ans用逆波兰表示法计算算术表达式的值。这段代码有什么错误,只有一个测试用例给了我错误的答案 【发布时间】:2022-01-14 23:30:27 【问题描述】:

问题链接: https://www.interviewbit.com/problems/evaluate-expression/

最后一个测试用例 [“500”、“100”、“20”、“+”、“40”、“*”、“+”、“30”、“-”] 给了我错误的输出。虽然在试运行中它给出了正确的输出

int Solution::evalRPN(vector<string> &a) 
    stack<char> s;
    
    for(int i =0;i<a.size();++i)
        
        if(a[i] == "+" || a[i] == "-" || a[i] == "*" || a[i] == "/")
           
             int v1 = s.top();
             s.pop();
             int v2 = s.top();
             s.pop();
             if(a[i] == "+") 
                 s.push(v2+v1);
             
             else if (a[i] == "-") 
                  s.push(v2-v1);
             
             else if (a[i] == "*") 
                   s.push(v2*v1);
              
             else if (a[i] == "/") 
                  s.push(v2/v1);
             
        
        else
            s.push(atoi(a[i].c_str()));
        
    
    return s.top();

【问题讨论】:

注意,表达式中最后一个+是酉运算符。 What is a debugger? 【参考方案1】:

我认为问题在于您在将integers 推入其中时已为char 声明堆栈,请尝试更改您的代码以使用

stack<int> s;

【讨论】:

以上是关于用逆波兰表示法计算算术表达式的值。这段代码有啥错误,只有一个测试用例给了我错误的答案的主要内容,如果未能解决你的问题,请参考以下文章

代码审查

逆波兰算术表达式 C语言

C语言 逆波兰表达式 算法

150. 逆波兰表达式求值

波兰表达式

逆波兰表达式