bool isOperator(char c)

{

   return (c == '+' || c == '-' || c == '*' || c == '/' || c == '$');

}



double evaluateOperator(char opr, double d1, double d2)

{

switch (opr) 

{

case '+' : return d1 + d2;

case '-' : return d1 - d2;

case '*' : return d1 * d2;

case '/' : return d1 / d2;

case '$' : return pow(d1, d2);

default : return 0;

}

}


double nextOperand(const string& expr, int& i)

{

int j = i;

while (j < expr.length() && expr[j] != ' ')

j++;


string number = expr.substr(i, j-i);

i = j;


return stod(number);

}


double evalPrefix(const string& prefix_expr, int& i)

{

while (i < prefix_expr.length())

{

if (prefix_expr[i] == ' ') 

i++;

else

{


if (isOperator(prefix_expr[i]))

{

char ch = prefix_expr[i];



i++;


double x = evalPrefix(prefix_expr, i);


i++;

double y = evalPrefix(prefix_expr, i);


return evaluateOperator(ch, x, y);

}


else

{

return nextOperand(prefix_expr, i);

}


}

}


}


double evaluate_prefix(const string& prefix_expr)

{

int i = 0;

double d = evalPrefix(prefix_expr, i);

return d;

}




나 같은 병신이 또 있을까 싶어 올려둔다.