括号匹配
2016-08-05 19:54
323 查看
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。输入
输入数据有多组,处理到文件结束。输出
如果匹配就输出“yes”,不匹配输出“no”示例输入
sin(20+10)
{[}]
示例输出
yes
no
提示
#include <stdio.h>#include <stdlib.h>#define max 12000typedef struct{int *top;int *end;int list;}sq;void init(sq &l){l.end=(int *)malloc(max*sizeof(int));l.top=l.end;l.list=max;}int cmp(char c){if(c=='(') return 1;if(c==')') return 4;if(c=='[') return 2;if(c==']') return 5;if(c=='{') return 3;if(c=='}') return 6;}void creat(sq &l,int d){int f;if(d>3){f=d-3;if(l.top==l.end){*l.top=d;l.top++;}else if(*(l.top-1)==f){l.top--;}else if(*(l.top-1)!=f){*l.top=d;l.top++;}}else{*l.top=d;l.top++;}}int main(){int flag;sq l;char a[120];while(gets(a)!=NULL){init(l);flag=0;int d,i;for(i=0;a[i]!='\0';i++){if(a[i]=='('||a[i]==')'||a[i]=='['||a[i]==']'||a[i]=='{'||a[i]=='}'){d=cmp(a[i]);flag=1;creat(l,d);}}if(flag==0) printf("yes\n");if(flag==1){if(l.top==l.end) printf("yes\n");else printf("no\n");}}}
相关文章推荐
- 几个著名而又非常有用的算法
- 数据库知识学习笔记
- 使用Juju将OpenStack部署在单机的LXD容器上(by quqi99)
- android开发工程师的面试
- 数据结构实验之串三:KMP应用
- linux sort 命令详解
- Negotiate: Use Key Tactics for Success
- 几个STL算法
- hdu 2647(Reward)
- 画家问题(关灯问题)
- POJ2411 Mondriaan's Dream(状态压缩)
- POJ 2299 Ultra-QuickSort (求逆序数:离散化+树状数组或者归并排序求逆序数)
- shell命令
- js,jq获取select下拉框的各项值
- 离散数学之把妹要诀
- PHP Date() 函数详细参数
- hdu 5791 dp
- HDOJ 2647 Reward
- 文件缓存与内存缓存
- Android进阶系列0—View的工作流程:measure,layout,draw小结