力扣刷题227:C++基本计算器 II

解题思路

1.使用容器,保存符号运算后的数值,
2.加减号直接存入
3.乘除号与尾部元素计算后将其替换

代码

class Solution {
public:
    int calculate(string s) {
        vector<int> v;//容器v来存储符号后的数值
        char preSign = '+';//变量 preSign 记录每个数字之前的运算符,对于第一个数字,其之前的运算符视为加号
        int num = 0;// 保存当前数字
        int n = s.length();//给出字符串的长度
        for(int i = 0;i < n;++i){//遍历字符串
            if(isdigit(s[i])){//当前字符是十进制数字字符
               num = num * 10 + int(s[i] - '0');//防止读到两个连续的数字,如:12是两个字符,需要进位累加
            }
            if(!isdigit(s[i]) && s[i] != ' '|| i == n - 1){//若读到一个非数字且不是空格 或者 读到字符串末尾,则根据 preSign 来决定计算方
                switch(preSign){
                    case '+'://如果是+
                    v.push_back(num);//数字直接存入
                    break;
                    case '-'://如果是-
                    v.push_back(-num);//数字存入负数
                    break;
                    case '*'://如果是-
                    v.back() *= num;//与末尾数字运算后结果存入
                    break;
                    default://如果是/
                    v.back() /= num;//与末尾数字运算后结果存入
                }
                preSign = s[i];// 处理完该数字后,更新 preSign 为当前遍历的字符
                num = 0;
            }
        }
        return accumulate(v.begin(),v.end(),0);// accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值