2017-10-07 68 views
-1

我们都知道,在C++中,括号中是唯一的“(”而不是“[”,我们可以检查通过写cout<<(2+3);它会给我的5个输出,但如果我写cout<<[2+3];cout<<{2+3};它会肯定会给错误,所以现在我们就知道,“(”是运营商和“[”是不是。缀以转换使用堆栈

我的问题有2个部分。

我的问题的第一部分是,如果我想转换表达式如下:

“a + b + [(b + c)+(d + e)(f + e)] (g + h)/(a + b)“ into postfix using stacks,will i push'['in stack too or i will just store it it like like other operands are stored字符串。

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

+0

'现在我们来了解'('是一个操作符,'['不是':你是什么意思?每个操作符都是专门为它的操作设计的 – batMan

+0

我认为你没有得到我的观点,我只是想要求中缀算法使用堆栈后缀转换说,当你遇到一个括号时,你把它推入堆栈,而不是'['?' –

回答

0

部分-1

你应该推[入堆栈太多,这是具有相同的优先级的(运营商两者属于同一类,并做相同的操作。

您可以修改代码,以便考虑[(])否则你可以在运营商设置过包括这些,让他们有相同的优先级括号。

部分-2

ab+[bc++de+fe+]*gh+*ab+/+:考虑[操作数(比方说),这是不正确的,[(b+c)应该评估为[bc+*因为这将是一个乘法,同样与(d+e)(f+e)去其前人的精力是de+fe+*就像你已评估(f+e)]fe+]*

+0

感谢@ batMan为清除我对括号的怀疑,得到了 –

+0

我得到了“ab + bc + de + fe + * + gh + * ab +/+“作为回答,这是正确的。感谢伴侣保佑:) –

+0

@omarkhan:干杯! (y) – batMan