public void S(string partOfstring) { if (String.IsNullOrWhiteSpace(partOfstring)) { throw new EmptyMemberException(); } try { int sk = 0; for (int i = partOfstring.Length - 1; i >= 0; i--) { if (partOfstring[i] == '(') { sk++; continue; } if (partOfstring[i] == ')') { sk--; continue; } if ((partOfstring[i] == '+' || partOfstring[i] == '-' && i != 0) && sk == 0) { Value = partOfstring[i].ToString(); Type = NodeType.PlusMinus; Left = new ElementOfTree(); Left.S(partOfstring.Substring(0, i)); Right = new ElementOfTree(); Right.T(partOfstring.Substring(i + 1)); return; } } if (partOfstring[0] == '-') { Value = partOfstring[0].ToString(); Type = NodeType.MinusU; Left = new ElementOfTree(); Left.T(partOfstring.Substring(1, partOfstring.Length - 1)); return; } T(partOfstring); } catch (ExpressionException e) { e.Node = GetNormalNodeState(partOfstring); throw; } }
private void T(string partOfString) { if (String.IsNullOrWhiteSpace(partOfString)) { throw new EmptyMemberException(); } try { int sk = 0; int divide = -1; int multiply = -1; int degree = -1; for (int i = partOfString.Length - 1; i >= 0; i--) { if (partOfString[i] == '(') { sk++; } else if (partOfString[i] == ')') { sk--; } else if (sk == 0) { if (partOfString[i] == '/' && divide == -1) { divide = i; } else if (partOfString[i] == '*' && multiply == -1) { multiply = i; } else if (partOfString[i] == '^' && degree == -1) { degree = i; } } } if (divide != -1) { Value = partOfString[divide].ToString(); Type = NodeType.Divide; Left = new ElementOfTree(); Left.T(partOfString.Substring(0, divide)); Right = new ElementOfTree(); Right.T(partOfString.Substring(divide + 1)); return; } if (multiply != -1) { Value = partOfString[multiply].ToString(); Type = NodeType.Multiply; Left = new ElementOfTree(); Left.T(partOfString.Substring(0, multiply)); Right = new ElementOfTree(); Right.T(partOfString.Substring(multiply + 1)); return; } if (degree != -1) { Value = partOfString[degree].ToString(); Type = NodeType.Degree; Left = new ElementOfTree(); Left.T(partOfString.Substring(0, degree)); Right = new ElementOfTree(); Right.Z(partOfString.Substring(degree + 1)); return; } M(partOfString); } catch (ExpressionException e) { e.Node = GetNormalNodeState(partOfString); throw; } }