.NET 4.x Преобразовать строку в обратную польскую запись. - C#

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

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

Собственно как это реализовать. Например входная строка "AvB" (где A и B заглавные симвволы) должен получить "B A v" А этот код пишет "A B" Описание стека;

Стек перставлен в виде универсального класса. и имеет следующие методы.

Add(X) добавляет элемент в начало; Del() удаляет ээлемент; Del_And_ReturnData() Возвращает значение 1 (с верху) элемента и удаляет его; Del_Next_And_ReturnData() Возвращает значение 2 (с верху) элемента и удаляет его; PS знаю что получился не совсем стек... Если такого нету то Ошибка ToString() Возвращает все элементы стека в виде строки.

Поля

Data первый элемент стека DataNext // второй элемент стека если есть
    class item<TypeStack>
    {
        #region класс элемента списка
        private class ItemS
        {
            private TypeStack _Data;
            private ItemS _Next;
            public TypeStack Data
            {
                get
                {
                    return _Data;
                }
                set
                {
                    _Data = value;
                }
            }
            public ItemS Next
            {
                get
                {
                    return _Next;
                }
                set
                {
                    _Next = value;
                }
            }
        }
        #endregion
        
        ItemS it = new ItemS();
 
        public void Add(TypeStack chislo)
        {
            ItemS a = new ItemS();
            a.Data = chislo;
            a.Next = it;
            it = a;
        }
 
        public void Del()
        {
            it = it.Next;
        }
 
        public TypeStack Del_And_ReturnData()
        {
            TypeStack s = it.Data;
            it = it.Next;
            return s;
        }
 
        public TypeStack Del_Next_And_ReturnData()
        {
            TypeStack s = it.Next.Data;
            if (it.Next.Next != null)
            {
                ItemS a = new ItemS();
                a.Data = it.Data;
                a.Next = it.Next.Next;
                it = a;
            }
            else
            {
                throw new Exception("Null");
            }
            return s;
        }
 
        public override string ToString()
        {
            string s = "";
            ItemS ss = it;
            while (ss.Next != null)
            {
                s += ss.Data + " ";
                ss = ss.Next;
            }
            return s;
        }
 
        public TypeStack Data
        {
            get { return it.Data; }
        }
 
        public TypeStack DataNext
        {
            get { return it.Next.Data; }
        }
    }

Код программы

  private string polsk(string Text)
        {
            string s = "";
            item<char> stack = new item<char>();
            char [] mass = Text.ToCharArray();
            for (int i = 0; i < mass.Length; i++)
            {
                if (mass[i] >= 'A' && mass[i] <= 'Z')
                {
                    s += " " + mass[i];
                }
                if(mass[i]=='!'||mass[i]=='v'||mass[i]=='^'||mass[i]=='→'||mass[i]=='↔'||mass[i]=='(')
                {
                    stack.Add(mass[i]);
                }
                if (mass[i] == ')')
                {
                    if (stack.Data != ')')
                        s += " " + stack.Del_And_ReturnData();
                    else
                        stack.Del();
                }
            }
            return s;
        }

Решение задачи: «.NET 4.x Преобразовать строку в обратную польскую запись.»

textual
Листинг программы
        private string polsk(string Text)
        {
            string s = "";
            item<char> stack = new item<char>();
            char [] mass = Text.ToCharArray();
            for (int i = 0; i < mass.Length; i++)
            {
                if (mass[i] >= 'A' && mass[i] <= 'Z')
                {
                    s += " " + mass[i];
                }
                if (mass[i] == '!' || mass[i] == 'v' || mass[i] == '^' || mass[i] == 'в†’' || mass[i] == '↔' || mass[i] == '(')
                {
                    stack.Add(mass[i]);
                }
                if (mass[i] == ')')
                {
                    while (stack.Data != '(')
                        s += " " + stack.Del_And_ReturnData();
                    stack.Del();
                }
            }
            s += " " + stack.ToString();
            return s;
        }

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


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

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

13   голосов , оценка 3.769 из 5
Похожие ответы