数据结构实验之栈四:括号匹配
来源:互联网 发布:一流演员 知乎 编辑:程序博客网 时间:2024/06/14 18:57
数据结构实验之栈四:括号匹配
Time Limit: 1000MS Memory limit: 65536K
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10){[}]
示例输出
yesno
提示
来源
ma6174
示例程序
这个题一开始提交了好几遍都wa,后来看到题中说字符串中包括空格,瞬间明悟了,泪奔.......,马上改输入
#include<stdio.h>#include<string.h>int main(){ char str[100]; char arr[100]; int top; while(gets(str)!=NULL) { top = -1; for(int i = 0;str[i] != '\0';i++) { if(str[i] == '(' || str[i] == '{' || str[i] == '[') { ++top; arr[top] = str[i]; } else if(str[i] == ')') { if(arr[top] == '(') { top--; } else { ++top; arr[top] = str[i]; break; } } else if(str[i] == '}') { if(arr[top] == '{') { top--; } else { ++top; arr[top] = str[i]; break; } } else if(str[i] == ']') { if(arr[top] == '[') { top--; } else { ++top; arr[top] = str[i]; break; } } } if(str[0] != '\0' && top == -1) printf("yes\n"); else if(str[0] != '\0') printf("no\n"); } return 0;}
这个是用栈来做的
#include<stdio.h>#include<stdlib.h>#include<string.h>#define stackmax 10000#define stacknum 10000typedef struct{ char *top; char *base; int stacksize;}stack;int initstack(stack &s){ s.base = (char *)malloc(stackmax*sizeof(char)); if(!s.base) exit(0); s.top = s.base; s.stacksize = stackmax; return 1;}void push(stack &s,char e){ if(s.top - s.base > s.stacksize) { s.base = (char *)realloc(s.base,(s.stacksize + stacknum)*sizeof(char)); if(!s.base) exit(0); s.top = s.base + s.stacksize; s.stacksize += stacknum; } s.top++; *s.top = e;}void pop(stack &s){ s.top--;}void choose(stack &s,char str[]){ int i; int f = 0; char e; for(i = 0;str[i] != '\0';i++) { if(str[i] == '(' || str[i] == '{' || str[i] == '[') { push(s,str[i]); } else if(str[i] == ')') { e = *s.top; if(e == '(') { pop(s); } else { f = 1; break; } } else if(str[i] == '}') { e = *s.top; if(e == '{') { pop(s); } else { f = 1; break; } } else if(str[i] == ']') { e = *s.top; if(e == '[') { pop(s); } else { f = 1; break; } } } if(!f && s.top == s.base) printf("yes\n"); else printf("no\n");}int main(){ char str[1000]; stack s; while(gets(str)!=NULL) { initstack(s); choose(s,str); } return 0;}
0 0
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- Android中打开其它应用
- Java Web学习(23): JSTL学习(一)
- HDOJ 4027 Can you answer these queries?(线段树+区间标记)
- IDEA 远程执行MapReduce
- 正则表达式
- 数据结构实验之栈四:括号匹配
- sizeof 操作符
- poj 3083 Children of the Candy Corn
- 【OpenJudge 】c语言_大象喝水
- 怎样在Android Studio中进行注释模板的设置
- hdu1754线段树(单节点更新+查询最大值)
- linux 高效的文件系统事件监控 内核级解析方案 inotify
- POJ Radar Installation 1328 (贪心)
- JUnit4使用教程-快速入门