static void Main(string[] args) { printMessage("Welcome to Fractionator!\nI will help you perform basic operations (+, -, *, /) with fractional numbers"); printMessage("Example: ? 1/7 + 3_8/16"); while (true) { string input = Console.ReadLine(); if (input.ToLower().Trim().Equals("exit")) { break; } if (input[0].Equals('?')) { FractionNumber f1, f2; string oper; if (FractionExpression.tryParse(input.Trim('?'), out f1, out f2, out oper)) { Console.WriteLine("Result: " + FractionExpression.executeOperation(f1, f2, oper)); } else { printMessage("Invalid expression!"); } } else { printMessage("Wrong input!"); } } }
public static bool tryParse(string expr, out FractionNumber f1, out FractionNumber f2, out string oper) { f1 = new FractionNumber(0); f2 = new FractionNumber(0); oper = ""; string[] pieces = expr.Split(' '); List <string> expPieces = new List <string>(); for (int p = 0; p < pieces.Length; p++) { if (pieces[p].Trim().Length > 0) { expPieces.Add(pieces[p]); if (expPieces.Count == 3) { break; } } } // Min set for operation if (expPieces.Count < 3) { return(false); } // Valid oper sign List <string> operands = new List <string> { "+", "-", "*", "/" }; if (expPieces[1].Length != 1 || !operands.Contains(expPieces[1])) { return(false); } oper = expPieces[1]; // Parse each fraction number if (!FractionExpression.tryParse(expPieces[0], out f1) || !FractionExpression.tryParse(expPieces[2], out f2)) { return(false); } return(true); }