Здравствуйте, по поводу опционального задания по стеку на c# (калькулятор выражений в ПАЛИЗ) решение можно кинуть в это обсуждение? И если - да, то в каком виде? Заранее спасибо.
`var st = new Stack<int>();
bool flag;
do
{
flag = true;
Console.WriteLine("Введите выражение в ПОЛИЗ");
var expr = Console.ReadLine();
var ss = Regex.Matches(expr, @"\d+|[+*]");
if ((ss.Count == 0) || (ss[ss.Count-1].Value!="+")&&(ss[ss.Count - 1].Value != "*")) // Есть хоть одно совпадение и выражение завершается оператором
{
flag = false;
}
foreach (Match m in ss)
{
if (int.TryParse(m.Value, out int a))
{
st.Push(a);
}
else if ((m.Value == "+") && (st.Count >= 2))
{
st.Push(st.Pop() + st.Pop());
}
else if ((m.Value == "*") && (st.Count >= 2))
{
st.Push(st.Pop() * st.Pop());
}
else
{
flag = false;
}
}
if (!flag)
{
Console.WriteLine("Please, try again");
}
} while (!flag);
Console.WriteLine($"Ответ:{st.Pop()}");
Console.ReadLine();`
var st = new Stack<int>();
int flag = 0;
do
{
flag = 0;
Console.WriteLine("Введите выражение в ПОЛИЗ");
var expr = Console.ReadLine();
var ss = Regex.Matches(expr, @"\d+|[+*]");
if (ss.Count == 0)// Есть хоть одно совпадение
{
flag = 2;
Console.WriteLine("Вы ввели строку, не содержащую допустимых символов");
}
else
{
foreach (Match m in ss)
{
if (int.TryParse(m.Value, out int a))
{
st.Push(a);
}
else if ((m.Value == "+") && (st.Count >= 2))
{
st.Push(st.Pop() + st.Pop());
}
else if ((m.Value == "*") && (st.Count >= 2))
{
st.Push(st.Pop() * st.Pop());
}
else
{
flag = 1;
}
}
}
if ((st.Count > 1)||(flag==1))
{
flag = 200;
Console.WriteLine("В выражении неверное кол-во операторов");
while (st.Count != 0)
{
st.Pop();
}
}
if (flag > 0)
{
Console.WriteLine("Пожалуйста, повторите попытку");
}
} while (flag > 0);
Console.WriteLine($"Ответ:{st.Pop()}");
Console.ReadLine();