使用正則表達式實現(加減乘除)計算器(C#實現)



起因:公司領導要求做一款基於行業規范的計算器,

然后需要用戶輸入一些數據,然后根據用戶輸入的數據滿足某些條件后,再根據用戶輸入的條件二進行加減乘除運算。;-)

期間因為查找規范等形成數據表的某一列是帶加減運算的,開發時又開動了一番腦筋(百度翻閱)才想出了解決辦法。

最終是解決辦法是根據用戶輸入的值W*4.26*10/100=X,其中(4.26*10/100)是保存在數據表中的某個值,取出這個值后把用戶輸入的數據形成一個新的計算式進行運算

string input=4000*4.26*10/100;  


public string compute(string input) {//各項正則表達式 string num = @"[\-]?([0-9]{1,}\.?[0-9]*)"; //匹配數字 string exp1 = @"(?<NUM1>" + num + ")" + @"(?<OP>[\*\/\^])" + @"(?<NUM2>" + num + ")"; //匹配乘法、除法、冪運算 string exp2 = @"(?<NUM1>" + num + ")" + @"(?<OP>[\+\-])" + @"(?<NUM2>" + num + ")"; //匹配加法、加法 //定義聲明正則表達式 Regex isExp1 = new Regex(exp1); //乘法、除法、冪運算 Regex isExp2 = new Regex(exp2); //加法、減法 //創建匹配對象 Match mExp1, mExp2; //先處理表達式中的乘、除法、冪運算 mExp1 = isExp1.Match(input); while (mExp1.Success) { GroupCollection gc = mExp1.Groups; //組匹配 decimal num1 = Convert.ToDecimal(gc["NUM1"].Value); //取操作數NUM1 decimal num2 = Convert.ToDecimal(gc["NUM2"].Value); //取操作數NUM2 switch (gc["OP"].Value) //取運算符OP,並判斷運算 { case "*": num1 *= num2; break; case "/": if (num2 == 0) //判斷除數是否為0 { return "DivNumZero"; //返回除數為0標志字符串 } else { num1 /= num2; break; } } input = input.Replace(mExp1.Value, string.Format("{0:f2}", num1)); //把計算結果替換進表達式 mExp1 = isExp1.Match(input); //重新匹配乘法、除法 } //再處理加減法 mExp2 = isExp2.Match(input); while (mExp2.Success) { GroupCollection gc = mExp2.Groups; //組匹配 decimal num1 = Convert.ToDecimal(gc["NUM1"].Value); //取操作數NUM1 decimal num2 = Convert.ToDecimal(gc["NUM2"].Value); //取操作數NUM2 switch (gc["OP"].Value) //取運算符OP,並判斷運算 { case "+": num1 += num2; break; case "-": num1 -= num2; break; } input = input.Replace(mExp2.Value, string.Format("{0:f2}", num1)); //把計算結果替換進表達式 mExp2 = isExp2.Match(input); //重新匹配加法、減法 } //把運算結果返回上一級 return input; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM