4.1.4—栈—Evaluate Reverse Polish Notation

来源:互联网 发布:现在开童装淘宝店 编辑:程序博客网 时间:2024/06/08 07:04
描述
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

#include<iostream>#include<string>#include<stack>#include<vector>#include <sstream>using namespace std;bool Isoperate(string str){if (str == "+" || str == "-" || str == "*" || str == "/")return true;elsereturn false;}int EvaluateReversePolish(vector<string> str){stack<string> mystack;for (int i = 0; i<str.size(); i++){if (!Isoperate(str[i]))mystack.push(str[i]);else{int x = atoi(mystack.top().c_str());mystack.pop();int y = atoi(mystack.top().c_str());mystack.pop();if (str[i] == "+")x = x + y;else if (str[i] == "-")x = x - y;else if (str[i] == "*")x = x*y;else if (str[i] == "/")x = y / x;//===string temp;ostringstream oss;oss << x;temp = oss.str();mystack.push(temp);}}return atoi(mystack.top().c_str());}int main(){vector<string > str;str.push_back("4");str.push_back("13");str.push_back("5");str.push_back("/");str.push_back("+");int res = EvaluateReversePolish(str);cout << res << endl;}