您的位置:首页 > 其它

括号匹配

2017-10-21 11:13 155 查看
#include<stdio.h>

#define Stack_Size 50

typedef struct

{

    char elem[Stack_Size];

    int top;

} SeqStack;

void InitStack(SeqStack *S)//初始栈

{

    S->top = -1;

}

bool Push(SeqStack *S,char ch)//进栈

{

    if(S->top == Stack_Size-1)

        return false;

    S->top++;

    S->elem[S->top] = ch;

    return true;

}

bool pop(SeqStack *S,char* ch)//出栈

{

    if(S->top == -1)

        return false;

    else

    {

        *ch = S->elem[S->top];

        S->top--;

        return true;

    }

}

bool GetTop(SeqStack *S,char *ch)//取得栈顶元素

{

    if(S->top == -1)

        return false;

    else

    {

        *ch = S->elem[S->top];

        return true;

    }

}

bool IsEmpty(SeqStack *S)//判断栈为空

{

    if(S->top == -1)

        return true;

    else

        return false;

}

bool Match(char c1,char c2)//比较括号是否匹配

{

    if(c1=='(' && c2==')')

        return true;

    else if(c1=='[' && c2==']')

        return true;

    else if(c1=='{' && c2=='}')

        return true;

    else

        return false;

}

void BrackMatch(char *str)

{

    SeqStack S;

    int i;

    char ch;

    InitStack(&S);//

    for( i = 0 ; str[i] != '\0'; i ++ )

    {

        switch(str[i])

        {

        case'(':

        case'[':

        case'{':

            Push(&S,str[i]);

            break;

        case')':

        case']':

        case'}':

            if(IsEmpty(&S))

            {

                printf("\n右括号多余!");

                return;

            }

            else

            {

                GetTop(&S,&ch);

                if(Match(ch,str[i]))

                    pop(&S,&ch);

                else

                {

                    printf("\n对应的左右括号不同类!");

                    return;

                }

            }

        }

    }

    if(IsEmpty(&S))

        printf("\n括号匹配!");

    else

        printf("\n左括号多余!");

}

int main()

{

    char str[Stack_Size];

    scanf("%s",&str);

    BrackMatch(str);

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: