四则运算

同样还是华为oj上的题,利用栈的思想实现

最后算出的数据都只有加减法,没有乘除法。

#include<string>

#include<iostream>
#include<algorithm>
#include<sstream>
#include<vector>
#include<deque>
using namespace std;
void addnum(deque<string>& rec, int pre)
{
if (!rec.empty())
{
int cur = 0;
if (rec.back() == "*" || rec.back() == "/")
{
string tmp = rec.back();
rec.pop_back();
stringstream s1(rec.back());
s1 >> cur;
rec.pop_back();
pre = (tmp == "*" ? cur*pre : cur / pre);
}
}
stringstream ss;
ss << pre;
rec.push_back(ss.str());
return;
}

int getNum(deque<string>& rec)
{
int sum = 0;
int pre = 0;
string f = "+";
while (!rec.empty())
{
stringstream ss(rec.front());
ss >> pre;
rec.pop_front();
sum = (f == "+" ? (sum + pre) : (sum - pre));
if (!rec.empty())
{
f = rec.front();
rec.pop_front();
}

}
return sum;
}

int* cal(string& s, int i)
{
deque<string> rec;
int pre = 0;
while (s[i] != ')'&&s[i] != ']'&&s[i] != '}'&&i<s.size())
{
if (s[i] >= '0'&&s[i] <= '9')
{
pre = pre * 10 + (s[i] - '0');
i++;
}
else if (s[i] != '(' && s[i] != '[' && s[i] != '{'){
addnum(rec, pre);
string sas;
sas += s[i];
rec.push_back(sas);
pre = 0;
i++;
}
else{
int* tmp = NULL;
tmp = cal(s, i + 1);
pre = tmp[0];
i = tmp[1] + 1;
}
}
addnum(rec, pre);
int *r = new int[2];
r[0] = getNum(rec);
r[1] = i;
return r;

}

int main()
{
string s;
while (cin >> s)
{
int* sum = cal(s, 0);
cout << sum[0] << endl;
}
return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值