Инфикс для преобразования Использование стеков
Все мы знаем, что в 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+]*
,