【问题标题】:Infix to Conversion Using stacks使用堆栈的中缀转换
【发布时间】:2017-10-07 08:56:39
【问题描述】:

我们都知道在 C++ 中,括号只是 '(' 而不是 '[' ,我们可以通过编写 cout<<(2+3);it 来检查它会给我输出 5 但如果我写 cout<<[2+3];cout<<{2+3}; 它肯定会报错,所以现在我们知道 '(' 是一个运算符,而 '[' 不是。

我的问题分为两部分。

我的问题的第 1 部分是,如果我想转换类似的表达式

“a+b+[(b+c)+(d+e)(f+e)](g+h)/(a+b)” 使用堆栈到后缀中,我是否也将 '[' 推入堆栈,或者我将它存储在字符串中,就像其他操作数存储在字符串中一样。

我的问题的第 2 部分是,在使用堆栈将表达式转换为后缀后,我得到了答案 "ab+[bc++de+fe+]*gh+*ab+/+ ",是否正确?在此过程中,我没有将“[”推入堆栈,因为我将其视为操作数。

【问题讨论】:

  • so now we come to know that '(' is an operator and '[' is not :你什么意思?每个操作员都是专门为其操作而设计的
  • 我想你没有明白我的意思,我只是想问一下使用堆栈的中缀到后缀转换的算法说,当你遇到括号时,你将它压入堆栈,而不是'[' ?

标签: stack infix-notation postfix


【解决方案1】:

第 1 部分

您也应该将[ 推入堆栈,它是一个与( 具有相同优先级的运算符,并且都属于同一类并执行相同的操作。

您可以修改您的代码,以便将[ 视为(,将] 视为),否则您也可以将它们包含在运算符集中,并赋予它们与括号相同的优先级。

第 2 部分

ab+[bc++de+fe+]*gh+*ab+/+ :将[ 视为操作数(假设)这是不正确的,因为[(b+c) 应该计算为[bc+*,因为这将是一个乘法,(d+e)(f+e) 也是如此,它应该是de+fe+*就像你已经评估了 (f+e)]fe+]*

【讨论】:

  • 感谢@batMan 解决了我对括号的疑虑,得到了
  • 我得到了“ab+bc+de+fe+*+gh+*ab+/+”作为答案,它是正确的。谢谢队友祝福:)
  • @omarkhan:如果有帮助,别忘了点赞,如果回答了,请打勾。
猜你喜欢
  • 2015-09-12
  • 2015-09-13
  • 1970-01-01
  • 2013-11-08
  • 2013-03-28
  • 2015-04-19
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
相关资源
最近更新 更多