08_栈的实例1---括号匹配

来源:互联网 发布:有没有正规的网络兼职 编辑:程序博客网 时间:2024/06/04 00:28

在前面的栈上实现括号匹配问题。

#include "linkStack.h"static int dio = 0;/*解决‘’的匹配*/static int shuang = 0;/*解决“”的匹配*/bool isLeft( const char left ) {    bool flag = false;    switch (left) {    case '<':    case '{':    case '[':    case '(':        flag = true;        break;    case '\'':        ++dio;        flag = true;        break;    case '\"':        ++shuang;        flag = true;        break;    default:        flag = false;        break;    }    return flag;}bool isRight(const char right) {    bool flag = false;    switch ( right ) {    case '>':    case '}':    case ']':    case ')':        flag = true ;        break;    case '\'':        ++dio;        flag = true;        break;    case '\"':        ++shuang;        flag = true;        break;    default :        flag = false;        break;    }    return flag;}bool match( const char left , const char right ) {    bool flag = false;    switch ( left ) {        case '<':            flag = (right=='>');            break;        case '[':            flag = (right==']');            break;        case '(':            flag = (right==')');            break;        case '{':            flag = (right=='}');            break;        case '\'':            flag = (right=='\'');            break;        case '\"':            flag = (right=='\"');            break;        default :            flag = false;            break;    }    return flag;}int scanner( const char *code ) {    linkStack chen;    LinkStack *stack = chen.LinkStack_Create();    int ret = 0 ;    char *pos = const_cast<char*>(code);    while ( *pos!='\0' ) {        if( isLeft(*pos) ){            chen.LinkStack_Push(stack,pos);        }        if ( isRight(*pos) ) {            char *left = (char*)chen.LinkStack_Pop(stack);            if ( !match(*left,*pos) ) {                break;            }        }        ++pos;    }    if ( (chen.LinkStack_Size(stack)==0 )&&(*pos=='\0')&&( dio%4==0)&&(shuang%4==0) ) {        cout << "succeed!" << endl;        ret = 1;    }else {        cout << "fail!" << endl;        ret = 0;    }    chen.LinkStack_Destroy(stack);    return ret;}int main(int argc, char **argv) {    const char* code = "#include <stdio.h> int main() { int a[5][5]; int (*p)[4]; p = a[0]; printf(\"%d\\n\", &p[3][3] - &a[3][3]); return 0; }";    scanner(code);    system( "pause" );    return 0;}
原创粉丝点击