如何判断四则运算的表达式正确性。
http://www.baidu.com/s?wd=24%E7%82%B9%E6%B8%B8%E6%88%8F&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&oq=24%E7%82%B9&rsp=0&f=3&inputT=8110
二十四点游戏,通过输入表达式,计算加减乘除24的结果。
4-(-6)*10/3=24
4-((-6)*10)/3=24
4-(-6)*(10/3)=24
4-((-6)*10/3)=24
4-(((-6)*10)/3)=24
4-((-6)*(10/3))=24
在24点在线网站中,如果表达式不对,小游戏会提示你的表达式不正确。
最常见的问题是表达式不正确
如
4-(-6)*10/3= ?
4-(-6)*10)/3= ?
4-(-6)*(10/3= ?
4-((-6*10/3)= ?
4-((-6)*10)/3)= ?
4 ((-6)*10/3))= ?
谢谢。
[解决办法]
有许多方法,例如:
1 扫描法。对找到的左右括号分别计数。
2 Repace 方法,先后将左右括号用空串替代,比较两次替换后的串长度是否相等。
strTmp1 = Replace(strSource, "(", "")
strTmp1 = Replace(strSource, ")", "")
If len(strTmp1) = len(strTmp2) Then
MsgBox "Good"
Else
KsgBox "Bad"
End If
3 Split 方法。先后以左右括号为分隔符分解原串,比较两次得到的数组上限索引。
Dim strTmp1() As String, strTmp2() As String
strTmp1 = Split(strSource, "(")
strTmp1 = Split(strSource, ")")
If UBound(strTmp1) = Ubound(strTmp2) Then
MsgBox "Good"
Else
KsgBox "Bad"
End If
4. 正则表达式方法,在 Global 属性为 True 的条件下,分别测试左右括号的匹配数。
5. More ...
[解决办法]
简单方法 eval 抛出异常 然后做错误处理