Infix evaluation (中序的四则预算)
I have not figured out the parentheses and points yet.
int infix(string exp)
{
stack<int> numStack; //for parsing the operand
stack<int> operandStack; //for store the operands
stack<char> operatorStack; // operators
for(int i=0; i<exp.size(); i++)
{
if(exp[i] == ' ')
{
break;
}
else if(exp[i]<='9' && exp[i]>='0')
{
numStack.push(exp[i]-'0');
}
else if(exp[i]=='*' || exp[i]=='/' )
{
int op = 0;
int n = 0;
while(!numStack.empty())
{
op += numStack.top()*pow(10.0,n);
numStack.pop();
n++;
}
operandStack.push(op);
operatorStack.push(exp[i]);
}
else if(exp[i]=='+' || exp[i]=='-')
{
int op = 0;
int n = 0;
while(!numStack.empty())
{
op += numStack.top()*pow(10.0,n);
numStack.pop();
n++;
}
if(operatorStack.empty())
{
operandStack.push(op);
operatorStack.push(exp[i]);
}
else
{
if(operatorStack.top() == '*')
{
op *= operandStack.top ();
operandStack.pop();
operandStack.push(op);
operatorStack.pop();
operatorStack.push(exp[i]);
}
else if(operatorStack.top() == '/')
{
op = operandStack.top ()/op;
operandStack.pop();
operandStack.push(op);
operatorStack.pop();
operatorStack.push(exp[i]);
}
else
{
operandStack.push(op);
operatorStack.push(exp[i]);
}
}
}
else if(exp[i] == '=')
{
int op = 0;
int n = 0;
while(!numStack.empty())
{
op += numStack.top()*pow(10.0,n);
numStack.pop();
n++;
}
if(operatorStack.top() == '*')
{
op *= operandStack.top();
operandStack.pop();
operandStack.push(op);
operatorStack.pop();
}
else if(operatorStack.top() == '/')
{
op = operandStack.top()/op;
operandStack.pop();
operandStack.push(op);
operatorStack.pop();
}
else
{
operandStack.push(op);
}
while(!operatorStack.empty())
{
if(operatorStack.top() == '+')
{
int o1 = operandStack.top();
operandStack.pop();
int o2 = operandStack.top();
operandStack.pop();
operandStack.push(o1+o2);
operatorStack.pop();
cout<<o1<<"+"<<o2<<endl;
}
else if(operatorStack.top() == '-')
{
int o1 = operandStack.top();
operandStack.pop();
int o2 = operandStack.top();
operandStack.pop();
operandStack.push(o2-o1);
operatorStack.pop();
cout<<o1<<"-"<<o2<<endl;
}
}
}
}
return operandStack.top();
}
浙公网安备 33010602011771号