VB6中text1中写入计算公式"=5*5+2*2",失去焦点后,text1中会显示结果??

例如我在text1控件中写:=5*5+2*2当Text1失去焦点后,text1.text会显示:5*5+2*2=29这样要怎么写程序哦?请高手指教下!!!... 例如我在text1控件中写:=5*5+2*2
当Text1失去焦点后,text1.text会显示:5*5+2*2=29
这样要怎么写程序哦?
请高手指教下!!!
展开
 我来答
cd68001
2011-07-04 · TA获得超过4228个赞
知道小有建树答主
回答量:976
采纳率:66%
帮助的人:344万
展开全部
说实话这题有点麻烦,还木分。刚哄完孩子有点困了,醒醒脑子,帮你试试写一个吧。
这需要先写一个语法分析器,分析你的=5*5+2*2这样的算式该先算什么、后算什么。
复杂的语法分析器程序量不小,好在你的题目算式也不难,那就写个简单的吧,主要是帮你理解处理过程:
总的来说,就是把这个算式一分为二(分成5*5和2*2),然后在这两个片段上再继续分(分成5、5、2、2),直到分不了为止,这时就剩一个纯数值了(如果不是,那就是不可识别的符号或运算符,需要给出错误消息)。我没有参考一些已有的算法,所以暂时给它起名‘二分法’吧:
程序是使用递归完成的:
Private Function nCompute(ByVal sFormula As String) As Currency
Dim sOper As Variant
sOper = Array("=", "+", "-", "/", "*") '计算优先级高的在后,低的在前

Dim i As Long
Dim iOper As Long
Dim nLeft As Currency
Dim nRight As Currency

For i = 0 To UBound(sOper)
iOper = InStr(sFormula, sOper(i))
If iOper > 0 Then
nLeft = nCompute(Left(sFormula, iOper - 1))
nRight = nCompute(Right(sFormula, Len(sFormula) - iOper))
Select Case sOper(i)
Case "+"
nCompute = nLeft + nRight
Case "-"
nCompute = nLeft - nRight
Case "/"
nCompute = nLeft / nRight
Case "*"
nCompute = nLeft * nRight
Case "="
nCompute = nLeft
End Select
Exit Function
End If
Next i

If IsNumeric(sFormula) Then
nCompute = Val(sFormula)
Else
MsgBox "不可识别的算式或运算符“" & sFormula & "”,无法完成计算。"
End If
End Function

Private Sub Text1_LostFocus()
Text1.Text = Trim(Text1.Text)
If Left(Text1.Text, 1) = "=" Then Text1.Text = Right(Text1.Text, Len(Text1.Text) - 1)
Text1.Text = Text1.Text & "=" & nCompute(Text1.Text)
End Sub
复杂的语法分析器,需要考虑()和各种函数,例如SQR()、ABS()、SIN()等,但都可以基于这个分析基础来实现,慢慢弄吧。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式