Evaluate Reverse Polish Notation【leetcode 2】

来源:互联网 发布:淘宝怎么防举报防排查 编辑:程序博客网 时间:2024/06/06 17:12


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


不断的压栈弹栈就可以了,不过有几个小地方需要学习一下。

1.   atoi函数:把字符串转换成整型数。ASCII to integer 的缩写。

原型:

int atoi(const char *nptr);

参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。

头文件: #include <stdlib.h>


2.    c_str()函数

string.c_str是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。


3.考虑压栈的顺序,如a/b和a-b操作,先弹出的是b,后弹出的是a ,注意顺序


代码:

#include <iostream>#include <cstring>#include <vector.h>#include <stack.h>using namespace std;//["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9//["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6int evalRPN(vector<string> & tokens ){stack<int> op;int s = tokens.size();//vector<string>::iterator iter = tokens.begin();//迭代器int a ,b;for(int i=0;i<s;i++){if(tokens[i] == "+"){a = op.top();op.pop();b = op.top();op.pop();op.push(a+b);}else //之前没有这个else就有问题if(tokens[i] == "-"){a = op.top();op.pop();b = op.top();op.pop();op.push(b-a);}else//之前没有这个else就有问题if(tokens[i] == "*"){a = op.top();op.pop();b = op.top();op.pop();op.push(a*b);}else//之前没有这个else就有问题if(tokens[i] == "/"){a = op.top();op.pop();b = op.top();op.pop();op.push(b/a);  //different}else{//  is a numberop.push(atoi(tokens[i].c_str()));//这里之前用迭代器做,就这个位置中出错//op.push(atoi(*iter.c_str())); //error}}return op.top();    }int main() {vector<string> s ;s.push_back("2");s.push_back("1");s.push_back("+");s.push_back("3");s.push_back("*");cout<<evalRPN(s);return 0;}

输出: 9


0 0
原创粉丝点击