括号验证问题

时间:2013-09-08 17:32:14

标签: vb.net algorithm parentheses

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

与此不同: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,则括号错误,否则它们是正确的,但是,输出始终是括号无效,即使它们是正确的。

有没有办法解决这个问题?或者只是一种更好的方法来检查括号?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

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

  1. 将嵌套级别变量初始化为0。
  2. 对于文本的每个字符:如果字符为'(',则将1添加到嵌套级别;如果字符为')',则从嵌套级别中减去1,如果嵌套级别为负,则立即报告失败。
  3. 最后,当且仅当嵌套级别为0时报告成功。