#include"expression.h"
Expression::Expression(string s):expression(s){}
void
Expression::FAlloper()
{
string T=expression;
auto
i=T.find_first_of(Operator);
while
(i!=string::npos)
{
oper.append(T,i,1);
if
(T[i+1]==
'-'
)
T.erase(0,i+2);
else
T.erase(0,i+1);
i=T.find_first_of(Operator);
}
}
void
Expression::FAlloperand()
{
size_t
p;
string T=expression;
do
{
operand.push_back(stod(T,&p));
if
(T[p]==
'='
)
break
;
T.erase(0,p+1);
}
while
(1);
}
string Expression::compute()
{
FAlloper();
FAlloperand();
while
(operand.size()!=1){
auto
i=oper.find_first_of(
"/*"
);
if
(i==string::npos)
while
(oper.size()!=0)
{
if
(oper[0]==
'+'
)
{
double
r=operand[0]+operand[1];
auto
ins=operand.erase(operand.begin(),operand.begin()+2);
operand.insert(ins,r);
oper.erase(oper.begin());
}
else
if
(oper[0]==
'-'
)
{
double
r=operand[0]-operand[1];
auto
ins=operand.erase(operand.begin(),operand.begin()+2);
operand.insert(ins,r);
oper.erase(oper.begin());
}
}
else
if
(oper[i]==
'*'
)
{
double
r=operand[i]*operand[i+1];
auto
ins=operand.erase(operand.begin()+i,operand.begin()+i+2);
operand.insert(ins,r);
oper.erase(i,1);
}
else
if
(oper[i]==
'/'
)
{
if
(operand[i+1]==0)
{
result=
"Error! Divisor can't be zero!"
;
return
result;
}
double
r=operand[i]/operand[i+1];
auto
ins=operand.erase(operand.begin()+i,operand.begin()+i+2);
operand.insert(ins,r);
oper.erase(i,1);
}
}
result=std::to_string(operand[0]);
return
result;
}