使用正则表达式实现(加减乘除)计算器(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" ...
随机推荐
- 树上神奇 逆 逆序对(我的叫法)hh的小纸条 重中之重!!!!!
HH是一位十分爱好数学的大佬,尤其喜爱数数,一天百无聊赖的他写下了一个1-N的排列,并且在小纸条上记下了每个数前面有多少个数比他小,但HH不小心忘记了这个排列.现在只有当时记下的小纸条,现在请你还原出 ...
- html5 textarea 写入换行的方法
html5 textarea 写入换行的方法<pre> <textarea id="fwe" class="selmiao" cols=&qu ...
- Python面向对象 | 类的成员
一. 细分类的组成成员 之前咱们讲过类大致分两块区域,静态字段部分和方法部分. 每个区域详细划分又可以分为: class A: company = '阿里巴巴' # 静态变量(静态字段) __tel ...
- 010.Kubernetes二进制部署kube-controller-manager
一 部署高可用kube-controller-manager 1.1 高可用kube-controller-manager介绍 本实验部署一个三实例 kube-controller-manager 的 ...
- 详解Vue 方法与事件处理器
本篇文章主要介绍了详解Vue 方法与事件处理器 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 方法与事件处理器 方法处理器 可以用 v-on 指令监听 DOM 事件 ...
- C语音中最简单的排序冒泡排序和选择排序代码实现(非指针)
#include<stdio.h> int main() { int a[5] = { 2,5,7,3,-1 }; int n = sizeof(a) / sizeof(a[0]);//元 ...
- nuxt.js 注册全局组件
plugins 属性配置 src: String (文件的路径) ssr: Boolean (默认为 true) 如果值为 false,该文件只会在客户端被打包引入. 根目录找到 nuxt.confi ...
- C语言|博客作业06
这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9885 我在这个课程的 ...
- Linux关机、重启、退出
序号 命令 说明 1 shutdown -h now 立即关机 2 shutdown -h +10 "请各位退出" 十分钟后关机,同时广播通告“请各位退出” 3 shutd ...
- 如何在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 ...