string Postfix::Record(const string& infstring)const { if (!infstring.length()) throw exception("String is empty"); Bracket(infstring); int tmp1 = Line(infstring); if (tmp1) throw exception("You have entered incorrect string"); map <char, int> operations; operations['*'] = 3; operations['/'] = 3; operations['+'] = 2; operations['-'] = 2; operations['('] = 1; Stack<char> result; Stack<char> operationsstack; char temp; for (int i = 0; i < infstring.length(); i++) { if (infstring[i] == ' ') continue; temp = infstring[i]; if (operations.count(temp)) { if ((!operationsstack.IsEmpty()) && (operations[temp] <= operations[operationsstack.GetKey()]) && (temp != '(')) while ((!operationsstack.IsEmpty()) && (operations[temp] <= operations[operationsstack.GetKey()])) result.Push(operationsstack.Pop()); operationsstack.Push(temp); continue; } if (((temp >= 'a') && (temp <= 'z')) || ((temp >= 'A') && (temp <= 'Z'))) { result.Push(temp); continue; } if (temp == ')') { char t = '0'; while ((!operationsstack.IsEmpty()) && (t != '(')) { t = operationsstack.Pop(); result.Push(t); } if (t == '(') result.Pop(); continue; } throw exception("You have entered anavailable symbol"); } while (!operationsstack.IsEmpty()) result.Push(operationsstack.Pop()); if (result.IsEmpty()) throw exception("You haven't entered any expression"); string resultstring = ""; while (!result.IsEmpty()) operationsstack.Push(result.Pop()); while (!operationsstack.IsEmpty()) resultstring += operationsstack.Pop(); return resultstring; }