首页 > 代码库 > 括号匹配为题(栈的思想)哈
括号匹配为题(栈的思想)哈
数据结构实验之栈四:括号匹配
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10){[}]
示例输出
yesno
提示
我的分析:运用栈的思想,读到左边的括号,就把它推进栈里面去,如果遇到的是右边的括号,就让当前读到的括号和栈顶的元素括号进行匹配。
如果匹配的上,就将栈的数字指针往后移一位(理论上应该将栈顶元素出栈,介于我的技术,我利用的是指针移位)。如果没有匹配上,
直接跳出循环,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"); }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。