首页 > Web开发 > 详细

vb.net 对字符串中的括号匹配进行判断,容许嵌套

时间:2019-10-25 17:25:02      阅读:113      评论:0      收藏:0      [点我收藏+]

    

‘   括号检查

‘     括号共有四种:  1(英文圆括号),2(中文圆括号),3[方括号],4{花括号}

‘      要左右匹配(可以嵌套)

Private Shared Function isBracketsOK(strInput As String) As Boolean

        

         ‘  四种括号,左右各一个,共8个

       Dim brace1_open As Char = "("

       Dim brace1_close As Char = ")"

       Dim brace2_open As Char = "("

       Dim brace2_close As Char = ")"

       Dim brace3_open As Char = "["

       Dim brace3_close As Char = "]"

       Dim brace4_open As Char = "{"

       Dim brace4_close As Char = "}"

       

          ‘  四个左括号的列表

       Dim list_braceOpen As List(Of Char) = New List(Of Char)

        list_braceOpen.Add(brace1_open)

        list_braceOpen.Add(brace2_open)

        list_braceOpen.Add(brace3_open)

        list_braceOpen.Add(brace4_open)

        

    ‘  四个右括号的列表

       Dim list_braceClose As List(Of Char) = New List(Of Char)

        list_braceClose.Add(brace1_close)

        list_braceClose.Add(brace2_close)

        list_braceClose.Add(brace3_close)

        list_braceClose.Add(brace4_close)

       

 

‘   左括号 和 右括号 的一一对应关系,用字典表示

       Dim dic_braces As Dictionary(Of Char, Char) = New Dictionary(Of Char, Char)

        dic_braces.Add(brace1_open, brace1_close)

        dic_braces.Add(brace2_open, brace2_close)

        dic_braces.Add(brace3_open, brace3_close)

        dic_braces.Add(brace4_open, brace4_close)

       

 

     ‘  右括号 组成的 堆栈(先进后出)

       Dim stack_close As Stack(Of Char) = New Stack(Of Char)

        

   Dim CharArr As Char() = strInput.ToCharArray()   ‘  将字符串转为 字符数组 

       

      For Each _char In CharArr    ‘  对于每个字符

            

      If list_braceOpen.Contains(_char) Then   ‘   如果这是个 左括号

                                 stack_close.Push(dic_braces(_char))                             ‘  在 堆栈中 加入相应的 右括号

      ElseIf list_braceClose.Contains(_char) Then   ‘ 如果这是个  右括号                

         If stack_close.Count = 0 Then   ‘   如果 堆栈 已经空了(不能pop了)

                            Return False   ‘  报错

                              EndIf               

                            Dim charPop AsChar = stack_close.Pop()   ‘  从 堆栈中取得一个右括号

                            If _char <> charPop Then     ‘  如果 从堆栈中取得的右括号 和 这个右括号 不同

                                         Return False     ‘   报错

                            End If

               

     End If

        

  Next

       

 

   If stack_close.Count > 0 Then   ‘  如果堆栈中还有 右括号

                  Return False

           End  If

        

    Return  True

    

End  Function

vb.net 对字符串中的括号匹配进行判断,容许嵌套

原文:https://www.cnblogs.com/gaoleionline/p/11739077.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!