leetcode227基本计算器

这篇博客探讨了如何使用栈来处理非标准计算表达式,例如23+24-7/9+22-4+12。首先对含有空格的式子进行数据清洗,然后利用栈进行计算,先处理乘除法,再处理加减法。在遇到运算符时,根据栈中的元素进行相应的计算,并将结果压入栈中。最后,通过遍历整个表达式,确保所有数字都被正确计算。代码示例展示了具体的实现过程。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
思路:

  1. 式子里面有空格,不是标准的计算式,先洗一遍数据,后面好处理。
  2. 用栈的方式进行计算过程,例如23+24-7/9+22-4+12;
    (1)相当于+23+24-7/9+22-4+12。
    (2)用栈进行数据积累的过程,先计算除法和乘法,加法和减法先不计算,只是正负号入栈。
    (3)遇到乘除,都是用栈顶元素进行计算的过程。
    (4)注意最后一个数也必须加入计算,因为最后一个数值之后没有计算符
    (5)遇到符号才是上一个完整计算的过程,使用的是上一个计算符
    (+) 23 + 2 * 4 - 7 / 9 + 22 - 4 + 1 * 2
+*-/+-+*s.size()-1
1*2入栈&&1出栈
+1
-4
+22
-7/9入栈&&-7入栈
-7
2*4入栈&&2出栈
+2
(+)23

计算符号每次用的都是上一个
代码

int calculate(string s) {
   vector<long> result;
   int r;
   long num=0;
   string s1="";
   int sl =s.length(),i;
   //洗数据
   for(i=0;i<sl;i++)
       if(s[i]!=' ')
           s1.push_back(s[i]);
   int s1l=s1.length();
   //默认第一个为+
   char flag = '+';
   for(i=0;i<s1l;i++){
   	//可能会有多位数据
       if(s1[i]<='9'&&s1[i]>='0')
           num = num *10 +s1[i]-'0';
       //一个符号之前是一个完整的计算,要保证最后一个数也要被计算
       if(s1[i]>'9'||s1[i]<'0'||i==s1l-1){
           cout<<"i="<<i<<" "<<"num="<<num<<endl;
           switch (flag)
           {
           case '+':
               result.push_back(num);
               break;
           case '-':
               result.push_back(-num);
               break;
           case '*':
               r = result.back()*(num);
               result.pop_back();
               result.push_back(r);
               break;
           case '/':
               r = result.back()/(num);
               result.pop_back();
               result.push_back(r);
               break;
           }
           flag = s1[i];
           num = 0;
       }
       
   }
   //#include <numeric>特有的库函数
   return accumulate(result.begin(),result.end(),0);
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值