波蘭式表達式(後綴表達式)求值

#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<stdlib.h>
#include<iostream>

#include<vector>
#include<stack>
#include<string>

//力扣

/*
題目要求:
根據逆波蘭表示法,求表達式的值。
有效的運算符包括 +, -, *, / 。每一個運算對象能夠是整數,
也能夠是另外一個逆波蘭表達式。
*/

/*
解題思路:
建立一個棧,如果數字則將這個數字壓棧,如果符號則將棧頂兩個元素取出分別做爲左右操做數進行運算後入棧
*/
class Solution {
public:
    int evalRPN(vector<string>& tokens)//tokens是一個由string類構造的vector
    {
        stack <int> s;
        int left, right;
        int i = 0;
        for (i; i<tokens.size(); i++)
        {
            string &str = tokens[i];//爲了使用方便給定義一個string類的變量str做爲tokens中每一個元素的引用
            if (!("+" == str || "-" == str || "*" == str || "/" == str))
            {
                s.push(atoi(str.c_str()));//將字符類型的變量轉化爲整型
            }
            else
            {
                right = s.top();
                s.pop();
                left = s.top();
                s.pop();
                switch (str[0])
                {
                case '+':
                    s.push(left + right);
                    break;
                case '-':
                    s.push(left - right);
                    break;
                case '*':
                    s.push(left*right);
                    break;
                case '/':
                    s.push(left / right);
                    break;
                }
            }
        }
        return s.top();
    }
};

int main()
{
    system("pause");
    return 0;
}
相關文章
相關標籤/搜索