解题思路:
注意事项:
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复