#include <iostream>
#include <string>
using namespace std;
class Stack
{
private:
int size, top;
char a[100];
public:
Stack() { top = 0; }
void push(char var)
{
a[++top] = var;
}
char pop()
{
return a[top--];
}
char see()
{
return a[top];
}
bool empty() { return top == 0; }
};
int prioritet(int c)
{
int p;
switch (c)
{
case '(':
p = 0;
case ')':
p = 1;
case '+':
case '-':
p = 2;
break;
case '*':
case '/':
p = 3;
break;
case '^':
p = 4;
break;
default:
break;
}
return p;
}
int main()
{
setlocale(LC_ALL, "RUS");
Stack stck;
string start, poliz;
cout << "Введите выражение: ";
cin >> start;
for (int i = 0; i < start.length(); i++)
{
if (!isdigit(start[i]))
{
if (stck.empty())
{
stck.push(start[i]);
}
else if ((prioritet(start[i]) >= prioritet(stck.see())))
{
if (start[i] == ')')
{
while (stck.pop() != '(')
{
poliz += stck.pop();
}
stck.pop();
}
else
{
stck.push(start[i]);
}
}
else
{
while (!stck.empty())
{
poliz += stck.pop();
}
stck.push(start[i]);
}
}
else
{
poliz += start[i];
}
}
while (!stck.empty())
{
poliz += stck.pop();
}
cout << "\n" << poliz << endl;
return 0;
}