private static string HandleNegativeBrackets(string task) { IEnumerable <string> taskInBrackets = Regex.Split(task.Replace(" ", ""), "([-]{1}[(]{1}|[(]{1}|[)]{1})").Where(i => i != "").ToArray(); string taskWithWrappedNegativeBrackets = ""; var bracketsCache = new Stack <string>(); string lastLine = ""; // Handling negative brackets foreach (string currentLine in taskInBrackets) { if (CalculatorUtilities.IsOperator(lastLine.LastOrDefault().ToString()) && currentLine.Equals("-(")) { bracketsCache.Push("-("); taskWithWrappedNegativeBrackets += "(0"; } if (lastLine.Equals("-(") && currentLine.Equals("-(")) { taskWithWrappedNegativeBrackets += "0"; } else if (currentLine.Equals("(") && bracketsCache.Count > 0) { bracketsCache.Push("("); } else if (currentLine.Equals(")") && bracketsCache.Count > 0 && bracketsCache.Pop().Equals("-(")) { taskWithWrappedNegativeBrackets += ")"; } lastLine = currentLine; taskWithWrappedNegativeBrackets += currentLine; } return(taskWithWrappedNegativeBrackets); }
private bool IsNegative(string currentLine) { return((_taskLineBefore == "" || _taskLineBefore == "(" || CalculatorUtilities.IsOperator(_taskLineBefore)) && currentLine.Equals("-")); }