逆波兰表达式

逆波兰表达式又叫做后缀表达式:如下

a+b --> a,b,+

a+(b-c) --> a,b,c-,+

/*
问题描述:逆波兰表达式
作者:syt
日期:2018-03-07
*/

#include <iostream>
#include <string>
#include <stack>

using namespace std;

class PolishExp
{
public:
	PolishExp(string s = "")
	{
		str = s;
	}

	bool isOperator(char s)
	{
		if (s == '+' || s == '-' || s == '*' || s == '/')
			return true;
		else 
			return false;
	}

	int calculation()
	{
		for (int i = 0; i < str.length(); i++)
		{
			if (isOperator(str[i]))
			{
				int x = mystack.top();
				mystack.pop();
				int y = mystack.top();
				mystack.pop();
				mystack.push(doCalculation(x, y, str[i]));
			}
			else if (str[i] == ',' || str[i] == ' ')
				continue;
			else
				mystack.push(str[i] - '0');

		}

		return mystack.top();
	}
	int doCalculation(int x, int y, char c)
	{
		switch (c)
		{
		case '+':
			return x + y;
		case '-':
			return x - y;
		case '*':
			return x * y;
		case '/':
			return x / y;
		}
			

	}

private:
	string str;
	stack<int> mystack;
};

void main()
{
	string str = "4,5,*,1,2,+,+";
	PolishExp pe(str);
	cout << pe.calculation();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值