括号匹配

用栈实现括号匹配:依次扫描所有字符,遇到左括号入栈,遇到右括号则弹出栈顶元素检查是否匹配。

 

匹配失败的情况:

  1.左括号单身;

  2.右括号单身;

  3.左右括号不匹配;

 

代码实现:

bool brackCheck( char str [] , int length){

  SqStack S;

  InitStack ( S );  //初始化一个栈

  for ( int i = 0; i < length; i ++){

    if ( str [ i ] == ' ( ' || str[ i ] == ' [ ' ||str[ i ] == ' { '){    //扫描到左括号,入栈

      Push ( S, str [ i ]);

    }else {

      if ( StackEmpty ( S ) )  //扫描到右括号且当前栈空

        return false;    //匹配失败

      char topElem;

      Pop ( S ,topElem);    //栈顶元素出栈

      if ( str [ i ] == ' ) ' && topElem != '( ' )    //如果出栈元素与当前扫描到的元素不匹配

        return false;    //匹配失败

      if ( str [ i ] == ' ] ' && topElem != ' [ ' )

        return false;

      if ( str [ i ] == ' } ' && topElem != ' { ' )

        return false;

    } 

  }

   return StackEmpty ( S );  //检索完全部括号后,栈空说明匹配成功

}

posted on 2020-05-07 17:50  -#-  阅读(240)  评论(0)    收藏  举报

导航