Решение выражения постфиксной нотации в С#

У меня есть задание создать постфиксную нотацию из инфикса. Я получил код, работающий правильно, и у меня есть строка постфиксной записи, однако я не уверен, как получить от нее ответ. Есть ли метод .NET, который я могу вызвать? Я попытался погуглить проблему и могу найти только то, как изменить ее, чтобы опубликовать исправление.

Любая помощь горячо приветствуется.

Обновить Мне нужно было найти ответ на выражение вроде: 12+3-4+5-

Я надеялся найти более простой способ сделать это, но не нашел, поэтому написал свой собственный метод. Я опубликую это через 8 часов, когда мне разрешат.


person Troy Loberger    schedule 03.04.2012    source источник
comment
Не могли бы вы перефразировать свой запрос еще раз с более подробной информацией?   -  person Pankaj    schedule 03.04.2012
comment
Должен ли я писать свой собственный метод для решения выражения или есть встроенный класс, который я могу использовать для его решения?   -  person Troy Loberger    schedule 03.04.2012
comment
Используете ли вы бинарные деревья? Если это так, должно быть легко оценить результат. Вы должны опубликовать свой код, чтобы мы могли вам помочь.   -  person Msonic    schedule 03.04.2012
comment
Никаких бинарных деревьев. Я написал код, который работает, просто подумал, что есть более простой способ сделать это. Спасибо в любом случае!   -  person Troy Loberger    schedule 03.04.2012
comment
вы можете отредактировать свой вопрос и включить код, чтобы другие могли вносить предложения по улучшению вашего кода.   -  person    schedule 04.04.2012
comment
@ caseyr547 Я разместил это как ответ. Не стесняйтесь критиковать. Я уверен, что это не лучший способ сделать это, но он работает: D   -  person Troy Loberger    schedule 05.04.2012
comment
Если вы просто хотите проверить свой код, более подходящим может быть codereview.stackexchange.com.   -  person Heinzi    schedule 05.04.2012
comment
@Heinzi Извините, этот код в прошлом, он был просто для задания, просто выбросил его для всех, кому он может понадобиться.   -  person Troy Loberger    schedule 10.04.2012


Ответы (2)


Постфикс - это выражение в строке типа "10 9 + 7 % 3 -"

postfix = postfix.Trim();
                string[] ans = postfix.Split(' ');
                Stack<int> eval = new Stack<int>();
                for (int x = 0; x < ans.Length; x++)
                {
                    if ("*+%/-".Contains(ans[x]))
                    {
                        int temp1;
                        int temp2;

                        switch (ans[x])
                        {
                            case ("*"):
                                eval.Push(eval.Pop() * eval.Pop());
                                break;
                            case "-":
                                temp1 = eval.Pop();
                                temp2 = eval.Pop();
                                eval.Push(temp2 - temp1);
                                break;
                            case "%":
                                temp1 = eval.Pop();
                                temp2 = eval.Pop();
                                eval.Push(temp2 % temp1);
                                break;
                            case "+":
                                eval.Push(eval.Pop() + eval.Pop());
                                break;
                            case "/":
                                temp1 = eval.Pop();
                                temp2 = eval.Pop();
                                eval.Push(temp2 / temp1);
                                break;
                        }

                    }
                    else
                        eval.Push(Convert.ToInt32(ans[x]));
                }

// Слишком рано обрезаем код. после выполнения оператора for ответ будет int answer = eval.Pop();

person Troy Loberger    schedule 05.04.2012

person    schedule
comment
Было бы неплохо, если бы вы добавили краткое объяснение к вашему решению. Это сделает ваш ответ более полным. Полный ответ имеет больше шансов получить одобрение. - person honk; 16.11.2014