Esempio n. 1
0
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;
}