我在寻找的东西,解释我如何可以计算一个Polish Expression
,例如:计算波兰表达式
,如果我有这个((1+2)*4)+3
,以正常的方式是1+2*4+3 = 15
,但我需要 写这样:12+4*3+
使用stack
获得最高的价值,并在堆栈中再次把,看我的代码:https://ideone.com/0bdkkM
我已经看到一个职位,但我不明白我怎么可以让所需要的操作:StackOverflow
我在寻找的东西,解释我如何可以计算一个Polish Expression
,例如:计算波兰表达式
,如果我有这个((1+2)*4)+3
,以正常的方式是1+2*4+3 = 15
,但我需要 写这样:12+4*3+
使用stack
获得最高的价值,并在堆栈中再次把,看我的代码:https://ideone.com/0bdkkM
我已经看到一个职位,但我不明白我怎么可以让所需要的操作:StackOverflow
这是一个简单的RPN评估器,没有任何错误处理。你只需要一个堆栈来存储操作数,而不是操作符,这使得它很容易实现。
请注意,该版本假设操作数是输入表达式上的单个数字。我这样做是为了简化解析RPN表达式。在现实生活中,你会想要处理多位数的操作数。
std::stack<int> stack;
const char *expression="12+4*3+";
for(char c=*expression; c!=0; c=*expression++)
{
switch(c)
{
case '+':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs+rhs;
stack.push(result);
break;
}
case '-':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs-rhs;
stack.push(result);
break;
}
case '*':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs*rhs;
stack.push(result);
break;
}
case '/':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs/rhs;
stack.push(result);
break;
}
default:
int number=(c-'0');
stack.push(number);
break;
}
}
int final_result=stack.top();
std::cout << "result is " << final_result << std::endl;
'1243 + * +'不是'((1 + 2)* 4)+ 3'的逆波兰表示法。 '12 + 4 * 3 +'是。 –
维基百科有关RPN的[有很好解释和算法的文章](http://en.wikipedia.org/wiki/Reverse_Polish_notation)。 – legends2k
不错SO帖子:http://stackoverflow.com/questions/12023151/prefixpolish-notation-evaluation-c – NathanOliver