我们都知道在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 + / + ”,是否正确?在这个过程中,我没有把'['推入堆栈,因为我把它当作操作数。
答案 0 :(得分:0)
第1部分
你也应该将[
推入堆栈,它是一个与(
具有相同优先级的运算符,并且都属于同一个类并执行相同的操作。
您可以修改代码,以便将[
视为(
,将]
视为)
,否则您也可以将这些代码包含在操作符集中,并为其提供相同的代码优先顺序为括号。
<强>兼2 强>
ab+[bc++de+fe+]*gh+*ab+/+
:将[
视为操作数(让我们说)这是不正确的,因为[(b+c)
应评估为[bc+*
,因为它将是一个乘法,相同与(d+e)(f+e)
一样de+fe+*
,就像您已(f+e)]
评估fe+]*
一样。