大家好,是公号3分钟学堂的郭立员,今天给大家带来的是《字符串中的多项加减法运算(运算类型验证码)》有网友问了一个关于验证码中需要计算的问题,如下图:
![88466f32d7f9abd2085ab38abfb990ee.png](https://i-blog.csdnimg.cn/blog_migrate/133c5f3e3036b213a849832ba750c9b4.jpeg)
具体问题是这样:如何得到这个“14-45+60-28=”字符串的运算结果,问题难点在于字符串是不能直接进行计算加减法的,那么我们只能把字符串中的各个数字和符号逐一提取出来,然后按照符号的运算规则(相加或相减),把所有数字重新计算一遍得到最终的结果。
有了操作思路,那下面说说具体的操作过程:
第一步:获取所有数字,并存入数组当中。
使用方法是正则匹配,在之前文章《提取你想要的内容(正则匹配的简单介绍)》有详细介绍,这里直接上代码。
![4bebdf8c79320afb05ee48af9c716909.png](https://i-blog.csdnimg.cn/blog_migrate/2be3a9b5c831b5a450764a8407a99491.jpeg)
第二步:获取所有的运算符号,也存入数组。
这一步稍微难一些,我也是通过正则匹配得到的,使用了字符集[%+%-],这个字符集的意思是匹配结果只有两种(加号或者减号)
![3831b24c64843e9f9254f8e68e83e587.png](https://i-blog.csdnimg.cn/blog_migrate/5737e9c8d74062ace37ea7b67117ff81.jpeg)
第三步:判断运算符号是什么(加号还是减号)
![dd2735c72a340a5faa84e96fc1946112.png](https://i-blog.csdnimg.cn/blog_migrate/a5ebb41b26449db35ddf432d01e90a24.jpeg)
这里面a和b是数字,f是运算符号,通过if判断对ab进行计算。
第四步:多项加减法运算方法。
所谓多项就是不只有两个数字,就拿本次案例来说,有四个数字需要计算,因为只运算加减法,所以不需要考虑计算优先级的问题,从左往右逐个数字进行计算即可。
这里有一个思路难点,怎么把所有数字都运算一遍。初期我的想法是前一个数字和后一个数字进行运算,依次把所有数字执行一遍。
但是实际操作过程发现不是这样的,要前面运行结果和下一个数字进行运算。
比如:14-45+60-28=它的运行过程是
14-45=-31
-31+60=29
29-28=1
只有第一次计算是相邻两个数字,后面都是上一步运算结果和下一个数字计算。
那么我们操作的时候,加一个判断,当首次计算的时候,用相邻两数字计算,其余的用前面运行结果和下一个数字进行计算。
最终我们看看运行结果:
![444c863c020b72d6bf2994f03c0f6258.png](https://i-blog.csdnimg.cn/blog_migrate/949745ac6add6cdbde8e83a32ba90981.jpeg)
代码如下:
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
好了本期内容就这些