十进制字符串转化成八进制的表达式c语言,改错C++:利用栈实现10进制转换成8进制及后缀表达式的求值...

改错C++:利用栈实现10进制转换成8进制及后缀表达式的求值0

00e27ab806e4881f8254fe7ae8741834.pngSun_惠惠2014.02.04浏览102次分享举报

编译运行一直有问题,不知错在哪里。Stack类的定义写不下了,略,按照课本打上去的,应该没问题

enum Boolean{False,True};

#include

#include

#include

void transfer();

template

class Stack {

public:

Stack ( int=10 ); //构造函数

~Stack ( ) { delete [ ] elements; }//析构函数

void Push ( const Type & item ); //进栈

Type Pop ( ); //出栈

Type GetTop ( ); //取栈顶元素

void MakeEmpty ( ) { top=-1; } //置空栈

int IsEmpty ( ) const { return top == -1; }

int IsFull ( ) const { return top == maxSize-1; }

private:

int top; //栈顶数组指针

Type *elements; //栈数组

int maxSize; //栈最大容量

};

class Calculator

{

public:

Calculator(int sz):s(sz){}

void Run();

void Clear();

double output(){return s.GetTop();}

private:

void AddOperand(double value);

Boolean Get2Operands(double &left,double &right);

void DoOperator(char op);

Stack s;

};

int main()

{

transfer();

Calculator CALC(100);

cout<

CALC.Run();

cout<

CALC.output();

return 0;

}

void Calculator::AddOperand(double value)

{

s.Push(value);

}

Boolean Calculator::Get2Operands(double &left,double &right)

{

if(s.IsEmpty())

{

cerr<

return False;

}

right=s.Pop();

if(s.IsEmpty())

{

cerr<

return True;

}

left=s.Pop();

return True;

}

void Calculator::DoOperator(char op)

{

double left,right;

Boolean result;

result=Get2Operands(left,right);

if(result==True)

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)

{

cerr<

Clear();

}

else s.Push(left/right);break;

case'^':s.Push(pow(left,right));break;

}

else Clear();

}

void Calculator::Run()

{

char ch;

double newoperand;

while(cin>>ch,ch!='=')

{

switch(ch)

{

case'+':case'-':case'*':case'/':case'^':

DoOperator(ch);break;

default:cin.putback(ch);

cin>>newoperand;

AddOperand(newoperand);

break;

}

}

}

void Calculator::Clear()

{

s.MakeEmpty();

}

void transfer()

{

Stack t;

int n;

cout<

cin>>n;

while(n)

{

t.Push(n%8);

n=n/8;

}

while(!t.IsEmpty())

{t.Pop();}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值