代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
利用正则表达式和string制作计算器
作者:
shany33
/ 发布于
2015/9/14
/
696
首先我用string来储存数字,使得支持大数,并且将负数以最高位添加0来表示(会增加判断数字正负的困难,如:0.1是正数,00.1才是负数),并且自己编写了string数字的运算,有加减乘除、取模、开根号、幂运算、正余弦、e^x、阶乘,并且支持多重括号改变运算优先级。
string expression(str); string pattern = "(\\()([-])([0-9]+)([.][0-9]+)?(\\))"; //find(-15)or(-15.02),and transform it into -15 or -15.02 regex r(pattern); string format = "0$3$4"; expression = regex_replace(expression, r, format); //cout << expression << endl; pattern = "(\\()([0-9]+)([.][0-9]+)?(\\))"; //find(15)or(15.02),and transform it to 15 or 15.02 r.assign(pattern); format = "$2$3"; expression = regex_replace(expression, r, format); //cout << expression << endl; pattern = "(s)([0-9]+)([.][0-9]+)?"; //find s(x), and calculate it as sin(x) r.assign(pattern); while (regex_search(expression, result, r)) { temp = result.str(2) + result.str(3); product = sin(temp); expression = result.prefix().str() + product + result.suffix().str(); } pattern = "(c)([0-9]+)([.][0-9]+)?"; //find c(x), and calculate it as cos(x) r.assign(pattern); while (regex_search(expression, result, r)) { temp = result.str(2) + result.str(3); product = cos(temp); expression = result.prefix().str() + product + result.suffix().str(); } pattern = "(e)([0-9]+)([.][0-9]+)?"; //find e(x), and calculate it as Exp(x) r.assign(pattern); while (regex_search(expression, result, r)) { temp = result.str(2) + result.str(3); product = Exp(temp); expression = result.prefix().str() + product + result.suffix().str(); } pattern = "([0-9]+)([.][0-9]+)?(!)"; //find (x)!, and calculate it as factorial(x) r.assign(pattern); while (regex_search(expression, result, r)) { if (result.str(2) != "") { cerr << "invalid expression of " << result.str() << "!"; exit(1); } temp = result.str(1); product = factorial(temp); expression = result.prefix().str() + product + result.suffix().str(); } pattern = "(\\()([0-9]+)([.][0-9]+)?([-+/*%#^]([0-9]+)([.][0-9]+)?)+(\\))"; //find the compound expression in the ( ) r.assign(pattern); while (regex_search(expression, result, r))//inside start
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
shany33
贡献的其它代码
(
10
)
.
遍历Map
.
java简单的计算器类
.
文件操作
.
html5 文件上传 断点传输
.
数组中的最大小值和平均值
.
http/https协议使用jsoup文件上传
.
基于时间随机返回比率的随机值
.
利用正则表达式和string制作计算器
.
通用全局安全过滤xss & 防注入
.
采用二分查找找出某个数字的下标
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3