您的位置:首页 > 其它

括号匹配

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