اپراتور رشته ای در سی شارپ
درود بر دوستان
چطور میتونم یک متد درست کنم که وقتی رشته ای را وارد میکنم تشخیص بده
۵/۲/۴ => five/ two/four
بعد عملگری را انجام بده و جواب به شکل رشته نشان بده
مثلا
۲+۲ =۴ => two plus two is four
مرحله اول :متدی به نام (double Parse(string text میخوام درست کنم با کمک شی گرایی است وردی رشته ای بگیره وبعد جواب را رشته ای بده .
مرحله دوم: متد دیگری به نام term بسازم که به متدParse کمک کنه که رشته که میگیره بخونه و عملوندهای چپ و راست و اپراتوررا “one plus two” تشخیص بده سپس عملایات محاسبه جمع ؛تفریق؛ضرب یا تقسیم را انجام بده و بعد خروجی را با اولویت دادن به اپراتورهای ضرب و تقسیم اون رو تفکیک کنه و جواب به متد Parse بده.
با تشکر
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
using System; using System.Collections.Generic; namespace ConsoleApp2 { class Program { static void Main(string[] args) { } } public class Calculator { public string text = string.Empty; public static string PrettyParse(string text) { return $"{text} = {Parse(text)}"; } public static double Parse(string text) { var add = new Add(); var times = new Times() add.term[0] = new Value("one"); add.term[1] = times; times.term[0] = new Value("one"); times.term[1] = new Value("two"); return 0; } } class Token { protected string token; public Token(string text) { token = text; } } class Operator : Token { public Token left, right; public Operator(string text) : base(text) { } public static bool IsOperator(string text) { switch (text) { case "plus": case "minus": case "divided by": return true; default: return false; } } public double Solve() { if (token == "plus") { double left_val; if (left is Value) left_val = (left as Value).value; else left_val = (left as Operator).Solve(); double right_val; if (left is Value) right_val = (left as Value).value; else right_val = (left as Operator).Solve(); return left_val + right_val; } throw new NotImplementedException(); } //static Dictionary<string, Func<double, double, double>> text2operator = new Dictionary<string, Func<double, double, double>>() { // {"plus", (a, b) => a + b}, // lambda function // {"minus", (a, b) => a - b}, //}; } class Value : Token { public double value; public Value(string text) : base(text) { switch (text) { case "one": value = 1; break; case "two": value = 2; break; default: throw new Exception(); } } //public static Dictionary<string, double> stringNumber = new Dictionary<string, double>() { // {"zero", 0}, // {"one", 1}, // {"two", 2}, // {"three", 3}, // {"four", 4}, // {"five", 5}, // {"six", 6}, // {"seven", 7}, // {"eight", 8}, // {"nine", 9}, // {"ten", 10}, //}; } } |
ارسال یک پاسخ
شما برای افزودن نظر جدید یا باید وارد شوید یا اینکه ثبت نام کنید. ورود ثبت نام