.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;
}