📄 calcultor.cpp
字号:
#include"stack.h"
#include"calculator.h"
void calculator::enter(double num)
{
s.push(num);
}
bool calculator::get2operands(double& left,double& right)
{
if(s.isempty())
{
return false;
}
left=s.pop();
if(s.isempty())
{return false;
}
right=s.pop();
return true;
}
void calculator::compute(char ch)
{
bool result;
double c;double d;
result=get2operands(c,d);
if(result==true)
switch(ch)
{
case'+': s.push(d+c);cout<<"The result is "<<s.Top()<<"\n";break;
case'-': s.push(d-c);cout<<"The result is "<<s.Top()<<"\n";break;
case'*': s.push(d*c);cout<<"The result is "<<s.Top()<<"\n";break;
case'/':
if(c==0)
{ cerr<<"Divide by 0,invaild enter!"<<endl;
s.clear();
}else s.push(d/c);cout<<"The result is "<<s.Top()<<"\n";break;
}
else
s.clear();
}
void calculator::postfix()
{
Stack t; char ch,y;
t.clear();t.push('=');
while(cin>>ch,ch!='=')
{
if(isdigit(ch)) {
cin.putback(ch);double f;
cin>>f;
enter(f);}
else if(ch==')')
for(y=t.pop();y!='(';y=t.pop())
{compute(y);}
else{
for(y=t.pop();isp(y)>icp(ch);y=t.pop())
compute(y);
t.push(y);t.push(ch);
}
}
while(!t.isempty()){
y=t.pop(); cout<<y;compute(y);
}
}
int calculator:: isp(char a)
{
switch(a)
{
case '=': return 0;
case '(': return 1;
case '*':return 5;
case '/':return 5;
case '%':return 5;
case '+':return 3;
case '-':return 3;
case ')':return 8;
}
return 0;
}
int calculator:: icp(char b)
{
switch(b)
{
case '=':return 0;
case '(':return 8;
case '*':return 4;
case '/':return 4;
case '%':return 4;
case '+':return 2;
case '-':return 2;
case ')':return 1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -