使用正则表达式实现(加减乘除)计算器(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
{
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#实现)的更多相关文章
- 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能
#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...
- Javascript+Dom(加减乘除计算器)
计算器介绍:只能进行加减乘除,提示用户输入数字,正则表达式限制用户只能输入数字(在用户输入时限制),如果出现除零操作答案为0: 有两种针对不同运算符的解决方法: 1. 使用eval() 函数 //函数 ...
- Java练习——加减乘除计算器实现
Java练习--计算器(加减乘除) package method; import java.util.Scanner; /* 写一个计算器 实现加减乘除四个功能 并且能够用循环接收新的数据,通 ...
- Java加减乘除计算器实现
加减乘除计算机的实现 public static void main(String[] args) { while(true) { System.out.println("依次输入要计算的2 ...
- java 用接口实现加减乘除计算器
class Test{ public static void main(String[] args) { fun i=new fun(); jiafa s1=new jiafa(); jianfa s ...
- Python 第五天 递归,计算器(2)
利用函数编写如下数列: 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584, ...
- 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器
用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式. 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先 ...
- C#计算器代码
在刚刚接触c#的时候,就想做一个简单加减乘除计算器.这就是目标,可惜一直没有动手去做,今天特意把它简单做了.很简单,很简单,了却一个心愿了. 代码: using System; using Syste ...
- [Python笔记]第九篇:re正则表达式
一.正则表达式基础 1.正则表达式介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分 ...
- day_4.23 简易计算器
''' 简易加减乘除计算器demo 2018-4-23 19:32:49 ''' #1.界面 print("="*50) print(" 欢迎使用计算器v0.1" ...
随机推荐
- 康托展开&逆康托展开学习笔记
啊...好久没写了...可能是最后一篇学习笔记了吧 题目大意:给定序列求其在全排列中的排名&&给定排名求排列. 这就是康托展开&&逆康托展开要干的事了.下面依次介绍 一 ...
- 【Canvas真好玩】从黑客帝国开始
前言 笔者之前有一段时间一直在学习Canvas相关的技术知识点,通过参考网上的一些资料文章,学着利用简单的数学和物理知识点实现了一些比较有趣的动画效果,最近刚好翻看到以前的代码,所以这次将这些代码实践 ...
- 基于 H5 Canvas 实现楼宇自控系统
前言 楼宇自控是指楼宇中电力设备,如电梯.水泵.风机.空调等,其主要工作性质是强电驱动.通常这些设备是开放性的工作状态,也就是说没有形成一个闭环回路.只要接通电源,设备就在工作,至于工作状态.进程.能 ...
- Redis必备面试题《基础篇》
Date:2019-11-12 读前思考: 面试官会问什么样的问题? 所问的问题背后真实的套路是什么? 喜欢问Redis哪些问题? 如何顺畅回答面试问的问题?吊打面试官. 1.什么是Redis? Re ...
- MBR分区表的备份与还原
MBR分区表的备份与还原 MBR分区的存储 从下图可以看出,MBR分区前446字节是boot loader:接下来64字节是分区表:再然后就是三个主分区加一个拓展分区. 一.备份分区表,要跳过前446 ...
- systemd单元文件
前面我们提到过systemd启动可以对相相互依赖的串行的服务,也是可以并行启动的.在systemd中使用单元替换init的脚本来进行系统初始化.这节将要介绍系统初始化中,作为systemd的最小单元, ...
- go modules 学习
go modules 学习 tags:golang 安装 只需要golang的版本是1.11及之后的,这个模块就内置好了 环境变量 (1) 配置GoLang的GOROOT (2) 可以不配置GoLan ...
- python3 之 趣味数学题(爱因斯坦)
爱因斯坦曾出过这样一道有趣的数学题: 有一个长阶梯,若每步上 2 阶,最 后剩 1 阶; 若每步上 3 阶,最后剩 2 阶; 若每步上 5 阶,最后剩 4 阶; 若每步上 6 阶,最后剩 5 阶; 只 ...
- 2019-9-29,php基础学习,笔记
cobalt strike简单使用cobalt是一个后渗透测试工具,基于java开发,适用于团队间协同作战,简称"cs"cs分为客户端和服务端,一般情况下我们称服务端为团队服务器, ...
- scrapy自动抓取蛋壳公寓最新房源信息并存入sql数据库
利用scrapy抓取蛋壳公寓上的房源信息,以北京市为例,目标url:https://www.dankegongyu.com/room/bj 思路分析 每次更新最新消息,都是在第一页上显示,因此考虑隔一 ...