起因:公司领导要求做一款基于行业规范的计算器,

然后需要用户输入一些数据,然后根据用户输入的数据满足某些条件后,再根据用户输入的条件二进行加减乘除运算。;-)

期间因为查找规范等形成数据表的某一列是带加减运算的,开发时又开动了一番脑筋(百度翻阅)才想出了解决办法。

最终是解决办法是根据用户输入的值W*4.26*10/100=X,其中(4.26*10/100)是保存在数据表中的某个值,取出这个值后把用户输入的数据形成一个新的计算式进行运算

  1. string input=4000*4.26*10/100;
  2.  
  3. public string compute(string input)
  4. {//各项正则表达式
  5. string num = @"[\-]?([0-9]{1,}\.?[0-9]*)"; //匹配数字
  6. string exp1 = @"(?<NUM1>" + num + ")" + @"(?<OP>[\*\/\^])" + @"(?<NUM2>" + num + ")"; //匹配乘法、除法、幂运算
  7. string exp2 = @"(?<NUM1>" + num + ")" + @"(?<OP>[\+\-])" + @"(?<NUM2>" + num + ")"; //匹配加法、加法
  8.  
  9. //定义声明正则表达式
  10. Regex isExp1 = new Regex(exp1); //乘法、除法、幂运算
  11. Regex isExp2 = new Regex(exp2); //加法、减法
  12.  
  13. //创建匹配对象
  14. Match mExp1, mExp2;
  15.  
  16. //先处理表达式中的乘、除法、幂运算
  17. mExp1 = isExp1.Match(input);
  18. while (mExp1.Success)
  19. {
  20. GroupCollection gc = mExp1.Groups; //组匹配
  21. decimal num1 = Convert.ToDecimal(gc["NUM1"].Value); //取操作数NUM1
  22. decimal num2 = Convert.ToDecimal(gc["NUM2"].Value); //取操作数NUM2
  23. switch (gc["OP"].Value) //取运算符OP,并判断运算
  24. {
  25. case "*":
  26. num1 *= num2; break;
  27. case "/":
  28. if (num2 == ) //判断除数是否为0
  29. {
  30. return "DivNumZero"; //返回除数为0标志字符串
  31. }
  32. else
  33. {
  34. num1 /= num2;
  35. break;
  36. }
  37. }
  38. input = input.Replace(mExp1.Value, string.Format("{0:f2}", num1)); //把计算结果替换进表达式
  39. mExp1 = isExp1.Match(input); //重新匹配乘法、除法
  40. }
  41.  
  42. //再处理加减法
  43. mExp2 = isExp2.Match(input);
  44. while (mExp2.Success)
  45. {
  46. GroupCollection gc = mExp2.Groups; //组匹配
  47. decimal num1 = Convert.ToDecimal(gc["NUM1"].Value); //取操作数NUM1
  48. decimal num2 = Convert.ToDecimal(gc["NUM2"].Value); //取操作数NUM2
  49. switch (gc["OP"].Value) //取运算符OP,并判断运算
  50. {
  51. case "+": num1 += num2; break;
  52. case "-": num1 -= num2; break;
  53. }
  54. input = input.Replace(mExp2.Value, string.Format("{0:f2}", num1)); //把计算结果替换进表达式
  55. mExp2 = isExp2.Match(input); //重新匹配加法、减法
  56. }
  57.  
  58. //把运算结果返回上一级
  59. return input;
  60. }

使用正则表达式实现(加减乘除)计算器(C#实现)的更多相关文章

  1. 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

    #!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...

  2. Javascript+Dom(加减乘除计算器)

    计算器介绍:只能进行加减乘除,提示用户输入数字,正则表达式限制用户只能输入数字(在用户输入时限制),如果出现除零操作答案为0: 有两种针对不同运算符的解决方法: 1. 使用eval() 函数 //函数 ...

  3. Java练习——加减乘除计算器实现

    Java练习--计算器(加减乘除)  package method; import java.util.Scanner; /*  写一个计算器 实现加减乘除四个功能   并且能够用循环接收新的数据,通 ...

  4. Java加减乘除计算器实现

    加减乘除计算机的实现 public static void main(String[] args) { while(true) { System.out.println("依次输入要计算的2 ...

  5. java 用接口实现加减乘除计算器

    class Test{ public static void main(String[] args) { fun i=new fun(); jiafa s1=new jiafa(); jianfa s ...

  6. Python 第五天 递归,计算器(2)

    利用函数编写如下数列: 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584, ...

  7. 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器

    用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式. 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先 ...

  8. C#计算器代码

    在刚刚接触c#的时候,就想做一个简单加减乘除计算器.这就是目标,可惜一直没有动手去做,今天特意把它简单做了.很简单,很简单,了却一个心愿了. 代码: using System; using Syste ...

  9. [Python笔记]第九篇:re正则表达式

    一.正则表达式基础 1.正则表达式介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分 ...

  10. day_4.23 简易计算器

    ''' 简易加减乘除计算器demo 2018-4-23 19:32:49 ''' #1.界面 print("="*50) print(" 欢迎使用计算器v0.1" ...

随机推荐

  1. 树上神奇 逆 逆序对(我的叫法)hh的小纸条 重中之重!!!!!

    HH是一位十分爱好数学的大佬,尤其喜爱数数,一天百无聊赖的他写下了一个1-N的排列,并且在小纸条上记下了每个数前面有多少个数比他小,但HH不小心忘记了这个排列.现在只有当时记下的小纸条,现在请你还原出 ...

  2. html5 textarea 写入换行的方法

    html5 textarea 写入换行的方法<pre> <textarea id="fwe" class="selmiao" cols=&qu ...

  3. Python面向对象 | 类的成员

    一. 细分类的组成成员 之前咱们讲过类大致分两块区域,静态字段部分和方法部分. 每个区域详细划分又可以分为: class A: company = '阿里巴巴' # 静态变量(静态字段) __tel ...

  4. 010.Kubernetes二进制部署kube-controller-manager

    一 部署高可用kube-controller-manager 1.1 高可用kube-controller-manager介绍 本实验部署一个三实例 kube-controller-manager 的 ...

  5. 详解Vue 方法与事件处理器

      本篇文章主要介绍了详解Vue 方法与事件处理器 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 方法与事件处理器 方法处理器 可以用 v-on 指令监听 DOM 事件 ...

  6. C语音中最简单的排序冒泡排序和选择排序代码实现(非指针)

    #include<stdio.h> int main() { int a[5] = { 2,5,7,3,-1 }; int n = sizeof(a) / sizeof(a[0]);//元 ...

  7. nuxt.js 注册全局组件

    plugins 属性配置 src: String (文件的路径) ssr: Boolean (默认为 true) 如果值为 false,该文件只会在客户端被打包引入. 根目录找到 nuxt.confi ...

  8. C语言|博客作业06

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9885 我在这个课程的 ...

  9. Linux关机、重启、退出

    序号 命令 说明 1 shutdown -h now 立即关机 2 shutdown -h +10 "请各位退出"     十分钟后关机,同时广播通告“请各位退出” 3 shutd ...

  10. 如何在C++中使用boost库序列化自定义class ?| serialize and deserialize a class in cpp with boost

    本文首发于个人博客https://kezunlin.me/post/6887a6ee/,欢迎阅读! serialize and deserialize a class in cpp Guide how ...