forked from tomking1988/richang
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReversePolish.cpp
60 lines (52 loc) · 1.47 KB
/
ReversePolish.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stack>
#include <string>
#include <sstream>
#include <vector>
#include <iostream>
using namespace std;
class Solution {
public:
bool isOperator(const string& input)
{
string ops[] = {"+", "-", "*", "/"};
for (int i = 0; i < 4; i++)
{
if (input == ops[i])
{
return true;
}
}
return false;
}
void performOp(const string& input, stack<int>& calcStack)
{
int lVal, rVal, result;
rVal = calcStack.top();
calcStack.pop();
lVal = calcStack.top();
calcStack.pop();
if (input == "+")
result = lVal + rVal;
else if (input == "-")
result = lVal - rVal;
else if (input == "*")
result = lVal * rVal;
else if (input == "/")
result = lVal / rVal;
calcStack.push(result);
}
int evalRPN(vector<string> &tokens) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
stack<int> calcStack;
for (vector<string>::iterator it = tokens.begin(); it != tokens.end(); ++it)
{
int num;
if (istringstream(*it) >> num)
calcStack.push(num);
else if (isOperator(*it))
performOp(*it, calcStack);
}
return calcStack.top();
}
};