好长时间不来社区里玩了,发现这里比以前冷清多了,大家都是在告别、在抱怨、在转版、在散分……就如职业并不分什么贵贱一样(其实就是有贵贱之分),vb就像一个小妈生的孩子,从来都比别人矮半个头。我的一个朋友(我和朋友都不是学计算机的业余同志)干脆把我用的vb戏称goto语言,害的我现在做一些小程序只用vb做后台,web做前端,反正别人也看出来.asp的东西是什么做的,呵呵……好了闲话太多了,说下问题:假有个字符串(需要外部读入或者用户定义)如“2*(2+1)+10/5-2”怎样让vb识别这个表达式并根据四则运算法则正确算出答案?如果表达式中在加上自定义的函数又怎么办?谢谢。高分,不够我在补贴。

解决方案 »

  1.   

    Dim script As Object
        Set script = CreateObject("MSScriptControl.ScriptControl")
        script.Language = "VBScript"
        MsgBox script.Eval("2*(2+1)+10/5-2")
      

  2.   

    不是吧
    长度应该不是问题,大概不超过255就可以吧
    我以前写过fortran的
    从文件里读
    fortran每次都要读进一整行(不超过80个字符)
    我从中找关键字,然后分割,转化,计算
      

  3.   

    根据优先级,一般也就是自定义函数、括号、乘除、加减
    依次取出子字符串,递归计算出结果,并替换原字符串应该就可以了比如主函数是这样:Private Function Calc(tS As String) As String自定义函数是这样:Private Function Func(tS As String) As String '假定是算平方计算这个表达式:S = 2 * (2 + 1 * func(2 + 1)) + 10 / 5 - 2那么S的值大致就是这么个变化过程:
    2 * (2 + 1 * func(2 + 1)) + 10 / 5 - 2
    2 * (2 + 1 * 9) + 10 / 5 - 2
    2 * (2 + 9) + 10 / 5 - 2
    2 * 11 + 10 / 5 - 2
    22 + 2 - 2
    22
    Func里面可以再加参数
    实现不同自定义函数的计算
      

  4.   

    其实除了自定义函数的处理
    剩下的都用ScriptControl来算就很方便了~
      

  5.   

    在工程中添加“Microsoft  Script  Control1.0”控件,然后试试下面的代码  
     
    Private  Sub  Command1_Click()  
           With  Me.ScriptControl1  
                   .AddCode  "dim  a,b"  
                   .AddCode  "b=1"  
                   .AddCode  "a=b+10"  
                   .AddCode  "Msgbox  a"  
           End  With  
    End  Sub
      

  6.   

    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 LongPrivate 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 SubPrivate Sub Command1_Click()
    calc Text1
    End SubPrivate Sub Form_Load()
    Text1.Text = "1+2*3-4/5"
    End Sub
      

  7.   

    补充一下
    1.不用被  lxcc(虫子|专注于抢分) 误导,这段代码只能在 VB-IDE 中运行!
    2.Script Control 用 AddCode 同样可以添加函数的。