故我


私信TA

用户名:uq_37592642929

访问量:2985

签 名:

一起去啊,更远方的地方!!!!

等  级
排  名 706
经  验 3910
参赛次数 0
文章发表 53
年  龄 0
在职情况 学生
学  校 社会大学
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

#include <stdio.h>

#include <stdlib.h>

typedef struct s{

    int top;

    char data[1000];

}STACK;

void clear(STACK *stack){  //栈的初始化

    stack->top=-1;

}

void pop(STACK *stack){   //弹栈

    stack->top--;

}

void push(STACK *stack,char a){   //压栈

    stack->top++;

    stack->data[stack->top]=a;

}

int compare(char c){   //比较括号,将类型相同左右括号赋同一个值,以便于下面比较

    if (c==')'||c=='('){

        return 1;

    }else if (c==']'||c=='['){

        return 2;

    }else{

        return 3;

    }

}

int main (){

    char c[1000];

    scanf ("%s",c);

    STACK *stack;

    stack=(STACK *)malloc(sizeof (STACK));   //指针分配一个空间

    clear(stack);

    for (int i=0;c[i]!='\0';i++){

        if (c[i]=='('||c[i]=='['||c[i]=='{'){   //左括号都压栈

            push(stack,c[i]);

        }else if (c[i]==')'||c[i]==']'||c[i]=='}'){   //右括号与栈顶括号比较,是同一类型可以匹配,弹出栈顶括号,否则直接不匹配

            if (compare(stack->data[stack->top])==compare(c[i])){

                pop(stack);

            }else{

                printf ("Wrong");

                return 0;

            }

        }

    }

    if (stack->top==-1){   //最后栈空,则全部匹配上了

        printf ("OK");

    }else{

        printf ("Wrong");

    }

}


 

0.0分

0 人评分

  评论区

  • «
  • »