波兰语表达的计算
Calculation of Polish Expression
我正在寻找可以解释如何计算 Polish Expression
的内容,例如:
如果我有这个 ((1+2)*4)+3
,正常情况下是 1+2*4+3 = 15
,但我需要
这样写: 12+4*3+
到使用 stack
获取 top 的值并再次放入堆栈,请参阅我的代码:https://ideone.com/0bdkkM
我已经看到一个 post 但我不明白如何进行所需的操作:Whosebug
Reverse Polish 之所以流行,是因为它很好地映射到堆栈的计算机概念。
当用户输入数字时,将其压入堆栈。
当用户输入运算符时,从堆栈中弹出 2 个数字,计算结果,并将结果推回堆栈。
这是一个简单的 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;
我正在寻找可以解释如何计算 Polish Expression
的内容,例如:
如果我有这个 ((1+2)*4)+3
,正常情况下是 1+2*4+3 = 15
,但我需要
这样写: 12+4*3+
到使用 stack
获取 top 的值并再次放入堆栈,请参阅我的代码:https://ideone.com/0bdkkM
我已经看到一个 post 但我不明白如何进行所需的操作:Whosebug
Reverse Polish 之所以流行,是因为它很好地映射到堆栈的计算机概念。
当用户输入数字时,将其压入堆栈。
当用户输入运算符时,从堆栈中弹出 2 个数字,计算结果,并将结果推回堆栈。
这是一个简单的 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;