Java正则表达式实现计算器_利用正则表达式和string制作计算器

首先我用string来储存数字,使得支持大数,并且将负数以最高位添加0来表示(会增加判断数字正负的困难,如:0.1是正数,00.1才是负数),并且自己编写了string数字的运算,有加减乘除、取模、开根号、幂运算、正余弦、e^x、阶乘,并且支持多重括号改变运算优先级。git仓库:https://git.oschina.net/light8lee/calculator.git,欢迎指教。

1.[代码]最简单的正则处理部分

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值