public string[] ConvertToPostfixNotation(string input) { List<string> operators = new List<string>(standart_operators); List<string> outputSeparated = new List<string>(); Stack<string> stack = new Stack<string>(); foreach (string c in Separate(input)) { if (operators.Contains(c)) { if (stack.Count > 0 && !c.Equals("(")) { if (c.Equals(")")) { string s = stack.Pop(); while (!s.Equals("(")) { outputSeparated.Add(s); s = stack.Pop(); } } else if (GetPriority(c) > GetPriority(stack.Peek())) stack.Push(c); else { while (stack.Count > 0 && GetPriority(c) <= 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(); }
protected double[] PrepareParameterValueList () { Debug.Assert (mIsInitialized, "Calling PrepareParameters on a non-initialized formula on component " + Error.Hierarchy(mParent.GetComponent())); List<double> parameterValueList = new List<double> (); foreach (Parameter p in mParameters.Values) { parameterValueList.Add (p.bindedValue.GetValue ()); } return parameterValueList.ToArray (); }
public static string[] ConvertToReversePolishNotation(string input) { var output = new List<string>(); var stack = new MyStack<string>(); int startOfNum = 1; bool isNumStarted = false; int counter = 0; int lnth = 0; int opBrackets = 0; int clBrackets = 0; foreach (var i in input) { switch (i) { case '(': opBrackets++; break; case ')': clBrackets++; break; } } if (opBrackets != clBrackets) { throw new InvalidOperationException("Brackets error"); } bool prevOperator = false; foreach (var i in input) { if (Char.IsDigit(i) && !isNumStarted) { prevOperator = false; isNumStarted = true; startOfNum = counter; lnth++; } if (!Char.IsDigit(i) && isNumStarted) { string number = input.Substring(startOfNum, lnth - 1); output.Add(number); isNumStarted = false; lnth = 0; } if (Char.IsDigit(i) && isNumStarted) { lnth++; } if (counter == input.Length - 1 && isNumStarted) { string number = input.Substring(startOfNum, lnth - 1); output.Add(number); isNumStarted = false; lnth = 0; } if (Operators.Contains(i.ToString())) { if (i.ToString() == "(") { prevOperator = false; stack.Push(i.ToString()); } if (i.ToString() == ")") { prevOperator = false; while (stack.Top.Object != "(") { output.Add(stack.Pop()); if (stack.Top == null) continue; } } if (i.ToString() == "+" || i.ToString() == "/" || i.ToString() == "*" || i.ToString() == "-") { if (prevOperator) { throw new InvalidOperationException("Error"); } if (stack.Top != null) { if (GetPriority(i.ToString()) > GetPriority(stack.Top.Object)) { /*output.Add(i.ToString()); output.Add(stack.Pop());*/ stack.Push(i.ToString()); } else { stack.Push(i.ToString()); } } else { stack.Push(i.ToString()); } prevOperator = true; } } if (counter == input.Length - 1) { while (stack.Top != null) { if (stack.Top.Object == "(" || stack.Top.Object == ")") { stack.Pop(); } else { output.Add(stack.Pop()); } } } counter++; } return output.ToArray(); }