0

我正在编写一个简单的计算器应用程序,在评估语句之前,它会检查以确保任何括号的格式正确。它最初检查是否存在相同数量的左括号(和右)括号。如果有,那么它将检查它们的顺序是否正确。

不像这样:6) / (1 + 4)8 + (5

为此,我使用了以下代码:

Chkp("(1+1/2)+(2+3)")

这将调用:

Function ChkP(text As String)
    For i As Integer = 0 To CountOf(text, "(") - 1
        If CharIndex(text, "(", i) > CharIndex(text, ")", i) Then Return False
    Next
    Return True
End Function

然后会调用:

Function CharIndex(text As String, character As String, ByRef index As Integer)
    For x As Integer = 0 To text.Length - 1
        If text(x) = character Then
            index -= 1
            If index = -1 Then
                Return x
            End If
        End If
    Next
    Return -1
End Function

如果Chkp应该返回False括号是错误的,否则它们是正确的,但是,输出总是括号是无效的,即使是正确的。

有没有办法来解决这个问题?还是有更好的方法来完全检查括号?

任何帮助是极大的赞赏。

4

1 回答 1

3

检查括号是否平衡并且右括号总是出现在相应的左括号之后的最简单方法是:

  1. 将嵌套级别变量初始化为 0。
  2. 对于文本的每个字符:如果字符是'(',则嵌套层级加 1;如果字符为')',则将嵌套层级减1,如果嵌套层级为负数,则立即报告失败。
  3. 最后,当且仅当嵌套级别为 0 时才报告成功。
于 2013-09-08T17:38:01.520 回答