public string Parse(string expression) { string output = string.Empty; Stack <char> operStack = new Stack <char>(); for (int i = 0; i < expression.Length; i++) { if (IsDelimeter(expression[i])) { continue; } if (Char.IsDigit(expression[i])) { while (!IsDelimeter(expression[i]) && !IsOperator(expression[i])) { output += expression[i]; i++; if (i == expression.Length) { break; } } output += " "; i--; } if (IsOperator(expression[i])) { if (expression[i] == '(') { operStack.Push(expression[i]); } else if (expression[i] == ')') { char s = operStack.Pop(); while (s != '(') { output += s.ToString() + ' '; s = operStack.Pop(); } } else { if (operStack.Count > 0) { if (GetPriority(expression[i]) <= GetPriority(operStack.Peek())) { output += operStack.Pop().ToString() + " "; } } operStack.Push(char.Parse(expression[i].ToString())); } } } while (operStack.Count > 0) { output += operStack.Pop() + " "; } return(output); }