leetcode 227: Basic Calculator II


class Solution {
public:
     //利用堆栈实现基本运算,对给定的字符串进行轮训,如果是数字则进行循环累积,直到不为数字,则考虑如何将数字压入堆栈。
    //如果之前记录的flag操作符是+或者-号,则将该数字压入到堆栈中,如果是操作符是*或者/号,则将栈顶元素取出之后与当前数字进行运算,将运算结果保存到堆栈中。最后堆栈中所保存的数字之间均为+运算关系,则只需要将堆栈中的数字进行累加即可获得运算结果值。" 3+5 / 2 "
    int calculate(string s) {
        stack<int> nums;
        int temp;
        char flag='+';
         /*保存上一个运算符。当前数字怎样放进去,看上一个运算符。
            如果是+,直接放;
            如果-,加-号放数据;
            如果*,和栈顶元素乘积再放;
            如果/,和栈顶元素进行除法运算再放。*/
        for(int i=0;i<s.size();i++)
        {
            char c=s[i];
            if(c>='0'&&c<='9')
                temp=temp*10+int(c-'0');
             //不是数字的时候才会进行下面的操作,根据上一次符号,判断此时怎样放入数据,在放好数据之后,保存当前符号。 
            if((!(c>='0'&&c<='9')&&c!=' ')||i==(s.size()-1))
            {
                if(flag=='-')
                    nums.push(-1*temp);
                else if(flag=='+')
                    nums.push(temp);
                else if(flag=='*')
                {
                    temp=temp*nums.top();
                    nums.pop();
                    nums.push(temp);
                }
                else 
                {
                    temp=nums.top()/temp;
                    nums.pop();
                    nums.push(temp);
                }
                flag=s[i];
                temp=0;
            }
        }
        int ret=0;
        while(!nums.empty())
        {
            ret+=nums.top();
            nums.pop();
        }
        return ret;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值