用反波兰符号计算算术表达式的值

【T2】

英文题目: Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are+,-,,/. Each operand may be an
integer or another expression. Some examples: [“2”, “1”, “+”, “3”,
"
"] -> ((2 + 1) * 3) -> 9 [“4”, “13”, “5”, “/”, “+”] -> (4 + (13 /
5)) -> 6
中文题目:用反波兰符号计算算术表达式的值。有效的运算符为+、-、*、/。每个操作数可以是整数或其他表达式。

这是一道关于栈的练习题
解决思路就是我们可以依次读取容器中的字符串,对读到的数字或者操作符进行不同的操作,直到将字符串读取完毕。

  • 如果读到是数字:
    利用c_str()函数返回一个指向正规C字符串的指针, 内容与string串相同.,这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。再利用atoi()将字符串转为整型存在一个整型的操作数栈中。

  • 如果读到是四种运算符:
    则均分别从栈顶取出来两个操作数,进行运算符操作,将得到的运算结果再放到操作数中。这里要注意,先取出来的是后操作的。

循环完后,最后栈顶存的就是结果啦

代码如下:

class Solution {
public:
    int evalRPN(vector<string> &tokens) {
       
        int result;
        stack<int> opd;  //存储操作数
        for(int i=0;i<tokens.size();i++){
        //共5种判断:* + - \ 操作数
             if(tokens[i]=="*")
            {
                int rOpd = opd.top();   //右操作数
                opd.pop();
                int lOpd = opd.top();  //左操作数
                opd.pop();
                result = lOpd*rOpd;
                opd.push(result);
            }
            else if(tokens[i]=="/")
            {
                int rOpd = opd.top();
                opd.pop();
                int lOpd = opd.top();
                opd.pop();
                result = lOpd/rOpd;
                opd.push(result);
            }
            else if(tokens[i]=="+")
            {
                int rOpd = opd.top();
                opd.pop();
                int lOpd = opd.top();
                opd.pop();
                result = lOpd+rOpd;
                opd.push(result);
            }
            else if(tokens[i]=="-")
            {
                int rOpd = opd.top();
                opd.pop();
                int lOpd = opd.top();
                opd.pop();
                result = lOpd-rOpd;
                opd.push(result);
            }
            else
            {
                opd.push(atoi(tokens[i].c_str()));
            }
            
        }
        return opd.top();
        
    }
};

祝大葛们猪年快乐在这里插入图片描述!!

猜你喜欢

转载自blog.csdn.net/qq_42291666/article/details/86764196