leetcode 150. 逆波兰表达式求值、string转int

150. 逆波兰表达式求值

根据逆波兰表示法,求表达式的值。

有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 1:

输入: [“2”, “1”, “+”, “3”, “*”]
输出: 9
解释: ((2 + 1) * 3) = 9
示例 2:

输入: [“4”, “13”, “5”, “/”, “+”]
输出: 6
解释: (4 + (13 / 5)) = 6

涉及到:C++ string转int,string转double,string转long,int转string,double转string…
如果编译器是基于最新的C++11标准,那么这个问题就变的很简单,因为<string>中已经封装好了对应的转换方法:

标准库中定义了to_string(val);可以将其它类型转换为string。还定义了一组stoi(s,p,b)、stol(s,p,b)、stod(s,p,b)等转换函数,可以函数,可以分别转化成int、long、double等.

stoi(s,p,b);stol(s,p,b);stoul(s,p,b);stoll(s,p,b);stoull(s,p,b); 返回s的起始子串(表示整数内容的字符串)的数值,返回值的类型分别为:int、long、unsigned long、long long、unsigned long long.其中b表示转换所用的基数,默认为10(表示十进制).p是size_t的指针,用来保存s中第一个非数值字符的下标,p默认为0,即函数不返 回下标.
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int>my_stack;
        int a=0,b=0;
        int tmp=0;
        for(int i=0;i<tokens.size();i++)
        {
            if(tokens[i]=="+")
            {
                a=my_stack.top();
                my_stack.pop();
                b=my_stack.top();
                my_stack.pop();
                tmp=a+b;
                my_stack.push(tmp);
            }
            else if(tokens[i]=="-")
            {
                 a=my_stack.top();
                my_stack.pop();
                b=my_stack.top();
                my_stack.pop();
                tmp=b-a;
                my_stack.push(tmp);
                
            }
            else if(tokens[i]=="*")
            {
                 a=my_stack.top();
                my_stack.pop();
                b=my_stack.top();
                my_stack.pop();
                tmp=a*b;
                my_stack.push(tmp);
                
            }
            else if(tokens[i]=="/")
            {
                a=my_stack.top();
                my_stack.pop();
                b=my_stack.top();
                my_stack.pop();
                tmp=b/a;
                my_stack.push(tmp);
            }
            else
            {
                my_stack.push(stoi(tokens[i]));
            }
        }
        
        return my_stack.top();
        
    }
};

猜你喜欢

转载自blog.csdn.net/dihe874981/article/details/84337181
今日推荐