后缀表达式求值的输入是一个string的数组,或者vector。
还得建一个辅助栈,存储当前需要计算的两个数值。
这个可以扩展为database中的expression系统,满足数据库中所有的计算。
例如aggregation函数,系统函数,基本数值计算(需要设计所有数据类型处理)。
代码如下:
#include <stack>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <sstream>
class Solution {
public:
int evalRPN(vector<string> tokens){
int ret;
for(int i=0;i<tokens.size();i++){
string op=tokens[i];
if(!isOperator(op)){
numericStack.push(atoi(tokens[i].c_str()));
}
else{
int first=numericStack.top();numericStack.pop();
int second=numericStack.top();numericStack.pop();
int result=cal(second, first, op);
numericStack.push(result);
}
}
ret=numericStack.top();
return ret;
}
bool isOperator(string item){
if(item=="+")
return true;
else if(item=="-")
return true;
else if(item=="/")
return true;
else if(item=="*")
return true;
else
return false;
}
int cal(int left, int right, string op){
int res;
if(op=="+")
return left+right;
else if(op=="-")
return left-right;
else if(op=="*")
return left*right;
else
return left/right;
return res;
}
private:
stack<string> operatorStack;
stack<int> numericStack;
};
(本文完)