题目大致是 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
'至此话号被完全剥离,依据先乘除后加减的方式计算,并将结果返回
'计算乘除 fh = "+-×÷"
Dim Fh1 As Long, Fh2 As Long, Fh3 As Long, Num1 As String, Num2 As String, j As Long, lsbl As String
jsgs1 = Replace(jsgs1, ".", ".")
For i = 1 To Len(jsgs1)
'---找第一个乘除号
Fh1 = 0: Fh2 = 0
Fh1 = InStr(1, jsgs1, "×")
Fh2 = InStr(1, jsgs1, "÷")
If (Fh1 < Fh2 And Fh1 > 0) Or Fh2 = 0 Then
Fh2 = Fh1
End If
If Fh2 = 0 Then Exit For '式中无乘除运算,跳出循环向下执行
'-----找乘除号前面的数字
For j = Fh2 - 1 To 1 Step -1
lsbl = Mid(jsgs1, j, 1)
If lsbl = "+" Or lsbl = "-" Then
Num1 = Val(Mid(jsgs1, j + 1, Fh2 - j - 1))
Fh1 = j