实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
题解:在第一个数字字符前添加一个标记字符,默认为‘+’;将每一个符号和数字看成一个整体;+/-进容器,*/直接运算;最后遍历容器,将所有数字加起来。
class Solution {
public:
int calculate(string s) {
char sign = '+';
int num = 0;
vector<int> v;
for(int i = 0 ; i < s.size(); ++i)
{
if( isdigit(s[i]) ){ num = 10*num + (s[i] - '0'); }//考虑数字非个位数的情况
if( (!isdigit(s[i]) && s[i]!= ' ') || i == s.size() - 1){
if( sign == '+' ){ v.push_back(+num); }
if( sign == '-' ){ v.push_back(-num); }
if( sign == '*' ){
int tmp = v.back()*num;
v.pop_back();
v.push_back(tmp);
}
if( sign == '/' ){
int tmp = v.back()/num;
v.pop_back();
v.push_back(tmp);
}
sign = s[i];
num = 0;
}
}
int res = 0;
for( auto num : v ){ res += num; }
return res;
}
};