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

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

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

最终是解决办法是根据用户输入的值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
{
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;
}

使用正则表达式实现(加减乘除)计算器(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. 问题 C: 「Usaco2010 Dec」奶牛健美操O(∩_∩)O

    题目描述 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径.  ...

  2. 1. 彤哥说netty系列之开篇(有个问卷调查)

    你好,我是彤哥,本篇是netty系列的第一篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 本文主要讲述netty系列的整体规划,并调查一下大家喜欢的学习方式. 知识点 ne ...

  3. mysql update获取主键

    mysql update获取主键<pre>SET @update_id := 0;UPDATE mobantestinfo1 SET info2 = 'value', id = (SELE ...

  4. docker——端口映射

    端口映射 1.就是把容器的端口映射为宿主机的一个随机或者特定端口 2.使得外部用户可以访问容器服务 3.本质其实就是在底层做了iptables地址转发 4.出去的流量是做SNAT原地址转发 5.进来的 ...

  5. Java nio 空轮询bug到底是什么

    编者注:Java nio 空轮询bug也就是Java nio在Linux系统下的epoll空轮询问题. epoll机制是Linux下一种高效的IO复用方式,相较于select和poll机制来说.其高效 ...

  6. C# II: Class ViewModelBase and RelayCommand in MVVM

    好久不写WPF和MVVM,新建一个Project后,想起来ViewModelBase和RelayCommand没有.以下Code摘自MSDN上的Article:Patterns - WPF Apps ...

  7. SqlServer2005 查询 第二讲 distinct

    今天我们来说distinct关键字的用法. distinct - distinct:我们可以这样理解成[过滤重复值] - select distinct deptno from emp // -- 首 ...

  8. MathType转Word公式(OMML)

    背景 由于之前个人喜欢在Word里做笔记,而有很多笔记里存在着大量的公式.在早期,由于对Word自身的公式的不理解,所以便使用了MathType这个工具来编写公式.但是现在本人已经转战到LatTeX了 ...

  9. 学习Java第一步:安装Intellij IDEA和JDK

    注:其实真正学习一门新语言的第一步并不是安装开发工具,我是C#转JAVA,有一点编程经验了,所以可以直接跳过前面几步,直接上IDE. 1.下载IntelliJ IDEA [官网] http://www ...

  10. (C#)WPF:LinearGradientBrush 线性渐变画刷和RadialGradientBrush 圆形渐变画刷

    <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/200 ...