使用堆栈进行转换

时间:2017-10-07 08:56:40

标签: stack infix-notation postfix

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

我的问题有2个部分。

我的问题的第一部分是,如果我想转换像

这样的表达式

“A + B + [(B + C)+(d + E)(F + E)] (G + H)/(A + B)” 使用堆栈进入后缀,我会在堆栈中推送'[',或者我将它存储在字符串中,就像其他操作数存储在字符串中一样。

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

1 个答案:

答案 0 :(得分:0)

第1部分

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

您可以修改代码,以便将[视为(,将]视为),否则您也可以将这些代码包含在操作符集中,并为其提供相同的代码优先顺序为括号。

<强>兼2

ab+[bc++de+fe+]*gh+*ab+/+:将[视为操作数(让我们说)这是不正确的,因为[(b+c)应评估为[bc+*,因为它将是一个乘法,相同与(d+e)(f+e)一样de+fe+*,就像您已(f+e)]评估fe+]*一样。