力扣 ~ 表达式求值 C++解法

力扣 ~ 表达式求值 C++解法

题目

在这里插入图片描述
具体题目可点击此处进行查看!

C++递归解法

#include <iostream>
#include <stack>
#include <string>
#include <vector>
using namespace std;

vector<int> function(string s, int index){
	stack<int> stack;
	int num = 0;
	char op = '+';
	int i;
	for (i = index; i < s.length(); i++){
		//数字转换成int数字
		if (isdigit(s[i])){
			num = num * 10 + s[i] - '0';
			if (i != s.length() - 1)
				continue;
		}
		//碰到'('时,把整个括号内的当成一个数字处理
		if (s[i] == '('){
			//递归处理括号
			vector<int> res = function(s, i + 1);
			num = res[0];
			i = res[1];
			if (i != s.length() - 1)
				continue;
		}
		switch (op){
			//加减号先入栈
		case '+':
			stack.push(num);
			break;
		case '-':
			//相反数
			stack.push(-num);
			break;
			//优先计算乘号
		case '*':
			int temp = stack.top();
			stack.pop();
			stack.push(temp * num);
			break;
		}
		num = 0;
		//右括号结束递归
		if (s[i] == ')')
			break;
		else
			op = s[i];
	}
	int sum = 0;
	//栈中元素相加
	while (!stack.empty()){
		sum += stack.top();
		stack.pop();
	}
	return vector<int> {sum, i};
}

int solve(string s) {
	return function(s, 0)[0];
}

int main()
{
	string s2 = "(2*(3-4))*5";
	cout << solve(s2) << endl;
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值