public string[] GetPostfixNotationEquation(string input) { List <string> outputSeparated = new List <string>(); Stack <string> stack = new Stack <string>(); foreach (string c in ParseEquation(input)) { if (!c.ToTryParseToDouble(out _)) { if (stack.Count > 0 && !c.Equals("(")) { if (c.Equals(")")) { string s = stack.Pop(); while (s != "(") { outputSeparated.Add(s); s = stack.Pop(); } } else if (stack.Peek() != "(" && _calculationOperation.GetPriority(c) > _calculationOperation.GetPriority(stack.Peek())) { stack.Push(c); } else { while (stack.Count > 0 && stack.Peek() != "(" && _calculationOperation.GetPriority(c) <= _calculationOperation.GetPriority(stack.Peek())) { outputSeparated.Add(stack.Pop()); } stack.Push(c); } } else { stack.Push(c); } } else { outputSeparated.Add(c); } } if (stack.Count > 0) { foreach (string c in stack) { outputSeparated.Add(c); } } return(outputSeparated.ToArray()); }
public void GetPriority_should_return_number_priority(string operand, int priority) { var result = _calculationOperation.GetPriority(operand); Assert.AreEqual(priority, result); }