Инфикс для преобразования Использование стеков

Все мы знаем, что в C++ круглые скобки - только '(', а не '[', мы можем проверить это, написав cout<<(2+3);это даст мне вывод 5, но если я напишу cout<<[2+3]; или же cout<<{2+3}; это определенно даст ошибку, поэтому теперь мы узнаем, что '(' является оператором, а '[' - нет.

Мой вопрос состоит из 2 частей.

Часть 1 моего вопроса заключается в том, что если я хочу преобразовать выражение как

"a + b + [(b + c) + (d + e)(f + e)](g + h) / (a ​​+b)" в постфикс с использованием стеков, я тоже вставлю '[' в стек или я будет просто хранить его в строке, как другие операнды хранятся в строке.

Вторая часть моего вопроса заключается в том, что после преобразования выражения в постфикс с использованием стеков я получаю ответ "ab + [bC++ de + fe +] * gh + * ab + / + ", это правильно? во время процесса я не помещал "[" в стек, так как считал его операндом.

1 ответ

Часть-1

Вы должны подтолкнуть [ в стек тоже, это оператор, имеющий тот же приоритет, что и ( и оба принадлежат к одному классу и выполняют одну и ту же операцию.

Вы можете изменить свой код, чтобы рассмотреть [ как ( а также ] как ) иначе вы можете включить их в набор операторов и дать им тот же приоритет, что и в скобках.

Часть 2

ab+[bc++de+fe+]*gh+*ab+/+: Учитывая [ в качестве операнда (скажем, это неправильно, как [(b+c) следует оценить [bc+* как это было бы умножение, то же самое идет с (d+e)(f+e) который должен быть de+fe+* так же, как вы оценили (f+e)] в fe+]*,

Другие вопросы по тегам