理解后缀表达式求值代码
Understanding postfix expression evaluation code
我试图理解这段代码。它的作用是给表达式求值加上后缀。我有理解代码的问题。如果有人能帮助我,我将非常感激。
#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
int main()
{
//suppose a contains the string..
//n is the length of string...
char a[10]="A+B/C";
int n = strlen(a)
stack<int>s;
for (int i=0;i<n;i++)
{
if (a[i]=='+')
{
s.push(s.pop()+s.pop());
int temp1 = s.top();
s.pop();
int temp2 = s.top();
s.pop();
s.push(temp1 * temp2);
}
if (a[i]=='*')
s.push(s.pop() * s.pop());
if ((a[i]>='0') && (a[i]<='9'))
s.push(0);
while ((a[i]>='0') && (a[i]<='9'))
s.push(10*s.pop()+(a[i++]-'0'));
}
cout<<s.pop()<<endl;
return 0;
}
这个网站看起来是一个很好的资源,但是表达式应该使用数字,而不是字母。
假设你有一个中缀表达式1+2*3-4*5。相应的后缀是123*+45*-。首先,从左到右扫描字符串。前三个数字是操作数,因此它们将按照1(底部),2(中间),3(顶部)的顺序存储在堆栈中。接下来是*操作符。要处理这个问题,请从堆栈中取出前两个操作数并将它们相乘(取出的第一个是右操作数,第二个是左操作数)。这将计算为2*3=6,6将存储在堆栈中,使其成为1,6。
下一个是+操作符。1和6被弹出并添加,7被存储在堆栈中。在此之后,4和5也被压入堆栈(7,4,5)。下一个字符是另一个*操作符,因此它计算4*5=20并将20压入堆栈(7,20)。
最后,还有一个-操作符。将7和20取出并计算为7-20=(-13)。这将被压入堆栈,并准备作为您的最终答案弹出。
希望这有助于澄清任何困惑(假设我没看错你的问题)。
相关文章:
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 错误:'int'之前的预期主表达式以及代码中的许多类似错误
- C++:正则表达式匹配代码,打印多个匹配项?
- 代码样式:在 switch/if 语句的分支中重用控件表达式或控制变量
- 正则表达式代码无缘无故停止工作
- 如何构建包含C 11的恒定表达式的代码
- 我可以进一步简化此代码/表达式吗?
- 正则表达式C 代码
- 正则表达式捕获会使代码崩溃
- 我在C++文件中的简单代码块上有 2 个错误。错误 C2059:语法错误:"?"。第二智能感知:预期表达式。怎么了?
- Lambda 表达式等效于 C++ 代码
- 中缀到后缀表达式转换代码不起作用
- 将使用正则表达式缩短/美化代码重写它
- 在编写gawk代码时区分除法和正则表达式
- 代码块引发有关for_each的预期主表达式错误
- 我的代码出现错误:错误:“”之前应为主表达式代币
- 如何使用表达式命名 int,以便代码将生成给定数量的整数并命名它们 (c++)
- 是否可以构造与 3 个或更多非连续 UTF 代码点匹配的 PCRE UTF-8 正则表达式
- 为什么使用"cmatch"的C++正则表达式代码会引发"smatch"异常?
- 表达式模板与手写代码