[LeetCode]Basic Calculator II

这篇博客讨论了LeetCode中的Basic Calculator II问题,强调了解题的关键在于处理乘除加减的运算顺序。作者提到可以通过将加减号视为分隔符,逐个计算每个term来解决问题。文章提到了stringstream在处理此类问题时的实用性,它是iostream库的一部分,允许在内存中的字符串进行输入输出操作。还提及了istringstream、ostringstream和stringstream三种类型的字符串流,以及getline函数作为字符串分隔的替代方法。
摘要由CSDN通过智能技术生成

题目不难,但是想做对却也需要考虑很多细节。
没有括号的运算就是先乘除后加减,思路是把➕和➖看作分隔符,先计算分隔符隔开的一个个term,再把term相加。
举个例子:a+b*c/d-e,在这个例子中,读到第一个➕时,term是a,并且我们可以认为a已经被➕分割开了,可以加到总和里去了,所以sum现在是a,term往后读一个数,是b。然后往后读一个符号是✖️,所以term=term*c,即term = b*c。再向后读一个符号是➗,所以term=b*c/d。再读一个符号是减号,我们可以认为term已经被分割开,可以加入总和了,于是sum = a+b*c/d。但注意因为是➖,所以term是-e而不是e。所以我们只需要在运算式两端补两个➕,就可以完成了。

贴出下面的代码主要是因为它运用了stringstream这个类,非常好用。

iostream 标准库支持内存中的输入/输出,只要将流与存储在程序内存中的 string 对象捆绑起来即可。此时,可使用 iostream 输入和输出操作符读写这个 string 对象。标准库定义了三种类型的字符串流:
• istringstream,由 istream 派生而来,提供读 string 的功能。
• ostringstream,由 ostream 派生而来,提供写 string 的功能。
• stringstream,由 iostream 派生而来,提供读写 string 的功能。
要使用上述类,必须包含 sstream 头文件。
另外getline也可以用来作split的功能,原型是getline(istream&,string&,char delim)

int calculate(string s) {
        istringstream in('+'+s+'+');
        int term = 0, total = 0, n;
        char op;
        while (in>>op){
            if (op == '+' || op == '-'){
                total += term;
                in >> term;
                term *= op == '+' ? 1 : -1;
            }else{
                int tmp;
                in >> tmp;
                if (op == '*') term *= tmp;
                else term /= tmp;
            }
        }
        return total;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值