后缀表达式求值

#include <iostream>
#include "seqStack.h"
using namespace std;
class Calculator   //模拟一个简单的计算器。此计算器对键盘读入的后缀表达式求值
{
public:
Calculator(); //构造函数
void Run();          //执行表达式计算
void Clear();       //将栈清空
private:
void AddOperand(double value);   //操作数进栈
bool Get2Operands(double &left,double &right);//从栈中出栈两个操作数,&为引用
void DoOperator(char op);    //形成运算指令,进行计算
    seqStack s;
};
Calculator::Calculator()
{
s.InitseqStack();
}
void Calculator::AddOperand(double value)
{
s.Push(value);
}
bool Calculator::Get2Operands(double &left,double &right)
{
if (s.isEmpty())
{
cout<<"操作数不存在"<<endl;
return false;
}
right=s.Pop();
if (s.isEmpty())
{
cout<<"操作数不存在"<<endl;
return false;
}
left=s.Pop();
return true;
}
void Calculator::DoOperator(char op)
{
double left,right;
if (Get2Operands(left,right))
{
switch(op)
{
case '+':
s.Push(left+right); break;
case '-':
s.Push(left-right); break;
case '*':
s.Push(left*right); break;
case '/':
if(right==0.0)
{
cout<<"用0做除数,错误!"<<endl;
Clear();    //若除0,则报错,清栈
}else s.Push(left/right);
break;
}
} else Clear();//取操作数出错,清栈


}
void Calculator::Run()
{
char ch;
double newoperand;
cout<<"请输入后缀表达式,以=结尾"<<endl;
while (cin>>ch,ch!='=')
{
switch(ch){
case '+':
case '-':
case '*':
case '/':
DoOperator(ch); 
break;
default:
cin.putback(ch);  //将字符放回输入流,以便能用流操作符将其按一个浮点操作数重新读入
cin>>newoperand;  //重新读操作数
AddOperand(newoperand);//将操作数入栈
break;
}
}
cout<<""<<s.GetTop()<<endl;
}
void Calculator::Clear()
{
s.InitseqStack();
}
/*
void main()
{
Calculator c;
c.Run();
};
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值