数据结构--栈的应用之表达式求值

表达式求值


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

using namespace std;

//获取操作符的优先级
int getBigger(char operate){
	if(operate == '+' || operate == '-'){
		return 2;
	}else if(operate == '*' || operate == '/'){
		return 3;
	}else if(operate == '#'){
		return 0;
	}else if(operate == '$'){
		return 1;
	}
}

//计算两个数字的值
int caculate(double x,double y,char oper){
	if(oper == '+'){
		return x + y;
	}else if(oper == '-'){
		return x - y;
	}else if(oper == '*'){
		return x * y;
	}else if(oper == '/'){
		return x /y;
	}
}

int main(){
	string str;
	while(getline(cin,str)){
		if(str == "0"){
			break;
		}
		int index;
		stack<char> operate;
		stack<double> data;
		operate.push('#');
		str+='$';
		while(index < str.size()){
			if(str[index] == ' '){
				index++;
			}else if(str[index] >= '0' && str[index] <= '9'){
				//判断该数字字符是否是一个连续的数字
				double num  = 0;
				while(str[index] >= '0' && str[index] <= '9'){
					num = num * 10 + str[index] - '0';
					index++;
				} 
				//将数字压入栈中
				data.push(num);
			}else{
				//是操作符
                //如果当前的操作符比栈中的操作付大则直接进栈
         		//否则将栈中的操作符出栈并计算数值
				if(getBigger(str[index]) > getBigger(operate.top())){
					operate.push(str[index++]);
				}else{
					//将数字栈中的数字进行出栈
					double x = data.top();
					data.pop();
					double y = data.top();
					data.pop();
					//将符号栈中的数字进行出栈
					char oper = operate.top();
					operate.pop();
					//计算值 并将计算的值入栈
					data.push(caculate(y,x,oper));
				}
			}
		}
		printf("%.2f",data.top());
	}	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值