📄 operation.cpp
字号:
#include<iostream>
#include<cmath>
using namespace std;
#include"operation.h"
operation::operation(int a)
:s(a)
{
}
void operation::AddOperand(int value)
{
s.Add(value);
}
Boolean operation::GetTwoOperands(int &left, int &right)
{
if(s.IsEmpty())
{
//cerr<<"No Operand!"<<endl;
return False;
}
right = s.Delete();
if(s.IsEmpty())
{
//cerr<<"No Operand!"<<endl;
return False;
}
left = s.Delete();
return True;
}
void operation::DoOperator(char op)
{
int left, right;
Boolean result;
result = GetTwoOperands(left,right);
if(result == True)
{
switch(op)
{
case '+':
s.Add(left + right);
break;
case '-':
s.Add(left - right);
break;
case '*':
s.Add(left * right);
break;
case '/':
if(right==0.0)
{
cerr<<"Divided by 0!"<<endl;
Clear();
}
s.Add(left / right);
break;
}
}
else
Clear();
}
void operation::Clear()
{
s.MakeEmpty();
}
void operation::Run()
{
char a[100];
char ch;
int b=0;
for(;cin>>a[b],a[b] != '=';b++)
;
a[b]='=';
b=b+1;
int size=b;
while(b!=-1)
{
if(a[b-2]=='-'||a[b-2]=='+')
{char c=a[b-1];
a[b-1]=a[b-2];
a[b-2]=c;
}
if(a[b-2]=='*'||a[b-2]=='/')
{int d=b;
for(;;d--)
{
if(a[d-2]==')'||a[d-2]=='(')
{char c=a[d-1];
a[d-1]=a[d-2];
a[d-2]=c;
break;
}
if(a[d-2]=='+'||a[d-2]=='-')
{
char c=a[d-2];
a[d-2]=a[d-1];
a[d-1]=a[d+1];
a[d+1]=c;
b=d+1;
break;
}
}
}
b--;
if(b==0)
b=-1;
}
for(int i=0;i<size;i++)
{if (a[i]=='('||a[i]==')')
a[i]=' ';
}
int newoperand;
Clear();
int j=0;
while(a[j]!= '=')
{
switch(a[j])
{
case '+':
case '-':
case '*':
case '/':
DoOperator(a[j]);
break;
default:
if(a[j]!=' ')
{
cin.putback(a[j]);
cin>>newoperand;
AddOperand(newoperand);
break;
}
}
j++;
}
cout<<"The result is: "<<s.stack[s.top]<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -