括号匹配为题(栈的思想)哈
数据结构实验之栈四:括号匹配
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10) {[}]
示例输出
yes no
提示
我的分析:运用栈的思想,读到左边的括号,就把它推进栈里面去,如果遇到的是右边的括号,就让当前读到的括号和栈顶的元素括号进行匹配。
如果匹配的上,就将栈的数字指针往后移一位(理论上应该将栈顶元素出栈,介于我的技术,我利用的是指针移位)。如果没有匹配上,
直接跳出循环,printf("no\n");
#include <stdio.h> #include <string.h> char s[100], e=0; void main() { int i, f; int len; char a[100]; while(gets(a)!=NULL) { f = 1; e = 0; len = strlen(a); for(i=0; i<len; i++) { if(a[i]=='{' || a[i]=='[' || a[i]=='(') { s[e++] = a[i]; } if(a[i]==')') { if(e==0) { f=0; break; } if(e>0 && s[e-1]=='(') { e = e-1; } else if(e>0 && s[e-1]!='(') { f=0; break; } } if(a[i]==']') { if(e==0) { f=0; break; } if(e>0 && s[e-1]=='[') { e = e-1; } else if(e>0 && s[e-1]!='[') { f=0; break; } } if(a[i]=='}') { if(e==0) { f=0; break; } if(e>0 && s[e-1]=='{') { e = e-1; } else if(e>0 && s[e-1]!='{') { f=0; break; } } } if(f==0 || e>0) printf("no\n"); else if(e==0) printf("yes\n"); } }