把字符串存入数组c鱼鱼_字符串中的多项加减法运算(运算类型验证码)

大家好,是公号3分钟学堂的郭立员,今天给大家带来的是《字符串中的多项加减法运算(运算类型验证码)》有网友问了一个关于验证码中需要计算的问题,如下图:

88466f32d7f9abd2085ab38abfb990ee.png

具体问题是这样:如何得到这个“14-45+60-28=”字符串的运算结果,问题难点在于字符串是不能直接进行计算加减法的,那么我们只能把字符串中的各个数字和符号逐一提取出来,然后按照符号的运算规则(相加或相减),把所有数字重新计算一遍得到最终的结果。

有了操作思路,那下面说说具体的操作过程:

第一步:获取所有数字,并存入数组当中。

使用方法是正则匹配,在之前文章《提取你想要的内容(正则匹配的简单介绍)》有详细介绍,这里直接上代码。

4bebdf8c79320afb05ee48af9c716909.png

第二步:获取所有的运算符号,也存入数组。

这一步稍微难一些,我也是通过正则匹配得到的,使用了字符集[%+%-],这个字符集的意思是匹配结果只有两种(加号或者减号)

3831b24c64843e9f9254f8e68e83e587.png

第三步:判断运算符号是什么(加号还是减号)

dd2735c72a340a5faa84e96fc1946112.png

这里面a和b是数字,f是运算符号,通过if判断对ab进行计算。

第四步:多项加减法运算方法。

所谓多项就是不只有两个数字,就拿本次案例来说,有四个数字需要计算,因为只运算加减法,所以不需要考虑计算优先级的问题,从左往右逐个数字进行计算即可。

这里有一个思路难点,怎么把所有数字都运算一遍。初期我的想法是前一个数字和后一个数字进行运算,依次把所有数字执行一遍。

但是实际操作过程发现不是这样的,要前面运行结果和下一个数字进行运算。

比如:14-45+60-28=它的运行过程是

14-45=-31

-31+60=29

29-28=1

只有第一次计算是相邻两个数字,后面都是上一步运算结果和下一个数字计算。

那么我们操作的时候,加一个判断,当首次计算的时候,用相邻两数字计算,其余的用前面运行结果和下一个数字进行计算。

最终我们看看运行结果:

444c863c020b72d6bf2994f03c0f6258.png

代码如下:

Import "shanhai.lua"

Dim m="14-45+60-28="

Dim arr=shanhai.RegexFind (m, "%d+")

Dim fuhao=shanhai.RegexFind (m, "([%+%-]+)")

Dim d=0

For i = 0 To UBOUND(fuhao)

If i = 0 Then

d = 计算(arr(i), arr(i + 1), fuhao(i))

Else

d=计算(d, arr(i + 1), fuhao(i))

End If

TracePrint d

Next

TracePrint d

Function 计算(a, b,f)

If f = "+" Then

计算 = a + b

ElseIf f = "-" Then

计算=a-b

End If

End Function

好了本期内容就这些

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值