计算字符串表达式的值(50分)

xiaoMONKEY 2005-06-10 07:05:18
如题。我想将一串数字字符串如:(12+34)*15+23*3/16 我想得其结果,给位有什么办法?
...全文
165 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
szjhxu 2005-06-14
  • 打赏
  • 举报
回复
不要把问题复杂化啊!
唐古拉山 2005-06-11
  • 打赏
  • 举报
回复
晕!colin0613(红三天) 的方法不是解啊
xiaoMONKEY 2005-06-11
  • 打赏
  • 举报
回复
结帐
wumylove1234 2005-06-11
  • 打赏
  • 举报
回复
呵呵..

怎么没有给递归求解的算法呢?
我好想学学啊.
homezj 2005-06-11
  • 打赏
  • 举报
回复
晕!colin0613(红三天) 的方法是解吗?

Dim strTemp As String
Dim numTemp As Double
strTemp = (12 + 34) * 15 + 23 * 3 / 16
numTemp = Str(strTemp)
debug.print numTemp

==>

Dim strTemp As String
Dim numTemp As Double
strTemp = (12 + 34) * 15 + 23 * 3 / 16
debug.print strTemp

==>

Dim numTemp As Double
numTemp = (12 + 34) * 15 + 23 * 3 / 16
debug.print numTemp

==>

debug.print (12 + 34) * 15 + 23 * 3 / 16

嘿!经过我化简,原来一句就搞定了!
szjhxu 2005-06-11
  • 打赏
  • 举报
回复
colin0613(红三天) 的方法最简单了.
dyshadow 2005-06-11
  • 打赏
  • 举报
回复
牛啊,还方法1 方法2的,凯得头晕了~~~
@_@
关注!!
haen_zhou 2005-06-10
  • 打赏
  • 举报
回复
建议楼主起床就结贴吧.
haen_zhou 2005-06-10
  • 打赏
  • 举报
回复
还是上面的几位厉害。我在实际中也用到了。但是我是自己写了个函数。能完成+-*/\,abs,cos等功能。但是由于"()"这个东西确实讨厌....
唐古拉山 2005-06-10
  • 打赏
  • 举报
回复
还是我前面说的方法一简单多了

引用Microsoft Script Control 1.0

唐古拉山 2005-06-10
  • 打赏
  • 举报
回复
另外,改了下该函数:
唐古拉山 2005-06-10
  • 打赏
  • 举报
回复
TO:小吉

是啊,呵呵,忘记说了只能在设计时才有效了

另外,该了下该函数:

Function CalcStringExpression(ByVal szIn As String) As Single
On Error GoTo Z
Form1.txtExecuteLine.Text = "0"
ExecuteLine "s=" & szIn & ": Form1.txtExecuteLine.Text =s"
CalcStringExpression = Val(Form1.txtExecuteLine.Text)
Exit Function
Z:
CalcStringExpression = 0
End Function



homezj 2005-06-10
  • 打赏
  • 举报
回复
调用"vba6.dll"有个历史性问题,就是在编译后,无法使用。
引用Microsoft Script Control 1.0是个解决之道。
唐古拉山 2005-06-10
  • 打赏
  • 举报
回复
Form1.txtExecuteLine.Text的内容为:694.3125

唐古拉山 2005-06-10
  • 打赏
  • 举报
回复
MmMVP马甲的办法有个缺点,就是会冲刷调系统剪贴板的内容,下面我公布不使用剪贴板的方法:

但是需要一个"中间变量":一个专用的文本框,名称:txtExecuteLine

下面是源代码":

Private Declare Function EbExecuteLine Lib "vba6.dll" ( _
ByVal pStringToExec As Long, _
ByVal Unknownn1 As Long, _
ByVal Unknownn2 As Long, _
ByVal fCheckOnly As Long) As Long

Private Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
On Error Resume Next
ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function

Function CalcStringExpression(ByVal szIn As String) As Long
On Error GoTo Z
Form1.txtExecuteLine.Text = "0"
ExecuteLine "s=" & szIn & ": Form1.txtExecuteLine.Text =s"
CalcStringExpression = Val(Form1.txtExecuteLine.Text)
Exit Function
Z:
CalcStringExpression = 0
End Function

'开始计算:
Private Sub Command1_Click()
MsgBox CalcStringExpression("(12+34)*15+23*3/16")
End Sub


唐古拉山 2005-06-10
  • 打赏
  • 举报
回复

MmMVP马甲 还挺利索的啊


DooDu 2005-06-10
  • 打赏
  • 举报
回复
方法3:

Option Explicit
Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

Private Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function


Sub calc(ByVal x As String)
Dim result
ExecuteLine "dim x as double"
ExecuteLine "x= " & x
ExecuteLine "clipboard.settext x"
result = Clipboard.GetText
MsgBox x & "=" & result
Set result = Nothing
End Sub

Private Sub Command1_Click()
calc Text1
End Sub

Private Sub Form_Load()
Text1.Text = "(12 + 34) * 15 + 23 * 3 / 16"
End Sub
红三天 2005-06-10
  • 打赏
  • 举报
回复
Dim strTemp As String
Dim numTemp As Integer
strTemp = (12 + 34) * 15 + 23 * 3 / 16
numTemp = Str(strTemp)

结果显示为:694

Dim strTemp As String
Dim numTemp As Double
strTemp = (12 + 34) * 15 + 23 * 3 / 16
numTemp = Str(strTemp)

结果显示为:694.3125
唐古拉山 2005-06-10
  • 打赏
  • 举报
回复

结果显示为:694.3125

唐古拉山 2005-06-10
  • 打赏
  • 举报
回复

'方法一:
'引用Microsoft Script Control 1.0
Private Sub Command1_Click()
Dim MSSC As New ScriptControl
MSSC.Language = "VBScript"
MsgBox "计算表达式的结果是: " & MSSC.Eval("(12+34)*15+23*3/16")
Set MSSC = Nothing
End Sub


加载更多回复(2)

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧