Ошибка в алгоритме преобразования выражения в обратную польскую запись - C#

Узнай цену своей работы

Формулировка задачи:

Метод

OPLConvert

принимает выражение в виде строки, например "2+2*2". Пока что без учета приоритета операторов хочу чтобы мне мой метод отдавал вот это "22+2*", но он отдает мне вот это "22+2" и я не могу найти ошибку. Метод

OPLConvert

использует вспомогательный метод

IsOperator

определения цифры или оператора в строке. Ниже код обоих методов:
Листинг программы
  1. static public bool IsOperator(char ch)
  2. {
  3. if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^')
  4. return true;
  5. else return false;
  6. }
Листинг программы
  1. static public string OPLConvert(string expression) //МЕТОД ПРЕОБРАЗОВАНИЯ ВЫРАЖЕНИЯ В ОБРАТНУЮ ПОЛЬСКУЮ ЗАПИСЬ
  2. {
  3. string output = string.Empty; //Строка для хранения выражения (выходная строка)
  4. string input = expression; //Входная строка
  5. var operators = new Stack<byte>(); //стек для хранения операторов
  6. int i = 0;
  7. while (i != input.Length) // Пока есть ещё символы для чтения:
  8. {
  9. if (IsOperator(input[i]) == false) // Если символ является числом,
  10. {
  11. output += input[i]; //добавляем его к выходной строке.
  12. }
  13. else //ИНАЧЕ
  14. {
  15. if (operators.Count > 0) //Если в стеке есть элементы
  16. {
  17. output += (char)operators.Pop(); //То добавляем последний оператор из стека в строку с выражением
  18. }
  19. else // Если стек пуст
  20. {
  21. operators.Push((byte) input[i]); //добавляем оператор на вершину стека
  22. }
  23. }
  24. i++; //Читаем очередной символ.
  25. if (i == input.Length) //Когда прошли по всем символам, выкидываем из стека все оставшиеся там операторы в выходную строку
  26. {
  27. while (operators.Count > 0)
  28. {
  29. output += (char)operators.Pop();
  30. }
  31. }
  32. }
  33. return output; //возвращаем выходную строку
  34. }
Из main-класса обращаюсь к методам вот так:
Листинг программы
  1. Console.WriteLine(OPL.OPLConvert("2+2*2"));
Где ошибка?

Решение задачи: «Ошибка в алгоритме преобразования выражения в обратную польскую запись»

textual
Листинг программы
  1. if (operators.Count > 0) //Если в стеке есть элементы
  2.   {
  3.      output += (char)operators.Pop(); //То добавляем последний оператор из стека в строку с выражением
  4.      operators.Push((byte)input[i]); //добавляем оператор на вершину стека
  5.   }
  6.   else // Если стек пуст
  7.   {
  8.       operators.Push((byte)input[i]); //добавляем оператор на вершину стека
  9.   }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы