日期:2014-05-18  浏览次数:20626 次

面试遇到的一个奇葩题目 求大神们解答!!!
题目大致是  String eveal(String s)  意思是这个方法要返回一个结果  输入参数是一个字符串形式的 算式  如  (1+1)*3/2+1这样形式的字符串 你要返回结果   
------解决方案--------------------
这个就是一个算式计算器的核心函数
下面是我软件中的一个函数,完全符合你要求,只不过是VB6的代码。

Option Explicit
Dim Hds As String
Private Sub Form_Load()
    MsgBox "(1+1)×3÷2+1=" & GetJSResult("(1+1)×3÷2+1")
End Sub
Public Function GetJSResult(ByVal Jsgs As String) As Currency   '递归计算所给的数学算式
    Dim Kh1 As Long, Kh2 As Long, halfKh As Long
    Dim i As Long, jsgs1 As String
    jsgs1 = Jsgs
    '找出第一对最外层括号,并将其中内容做为参数调用本函数GetJSResult,继续剥离括号
    Kh1 = InStr(1, jsgs1, "(")
    If Kh1 > 0 Then
        halfKh = halfKh + 1
        For i = Kh1 + 1 To Len(jsgs1)
            If Mid(jsgs1, i, 1) = "(" Then halfKh = halfKh + 1
            If Mid(jsgs1, i, 1) = ")" Then
                halfKh = halfKh - 1
                If halfKh = 0 Then  '
                    Kh2 = i
                    jsgs1 = Left(jsgs1, Kh1 - 1) & GetJSResult(Mid(jsgs1, Kh1 + 1, Kh2 - Kh1 - 1)) & Right(jsgs1, Len(jsgs1) - Kh2)
                    Hds = Hds & vbCrLf & "=" & jsgs1
                    Kh1 = InStr(1, jsgs1, "(")
                    If Kh1 = 0 Then
                        Exit For
                    Else
                        i = Kh1 - 1
                    End If
                End If
            End If
        Next
    End If