数据结构实验之栈四:括号匹配
Time Limit: 1000MS Memory limit: 65536K
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10){[}]
示例输出
yesno
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #define sqmax 60 using namespace std; typedef struct { char*base; char *top; int sqsize; } sq; int init(sq &s); void push(sq &s,char n); char pop(sq &s); int empty(sq &s); int main() { sq s; int l,i,f; char t[60]; //while(cin>>t) while(gets(t)!=NULL) /***注æ��æ��ç©ºæ ¼é»�认为2个串***/ { init(s); f=0; l=strlen(t); for(i=0; i<l; i++) { if(t[i]=='('||t[i]=='['||t[i]=='{') push(s,t[i]); if(t[i]==')') { if(*s.top=='(') pop(s); else f=1; } if(t[i]==']') { if(*s.top=='[') pop(s); else f=1; } if(t[i]=='}') { if(*s.top=='{') pop(s); else f=1; } } if(!empty(s)||f==1) cout<<"no\n"; else { cout<<"yes\n"; } } } int init(sq &s) { s.base=(char *)malloc(sqmax *sizeof(char)); if(!s.base) exit(0); s.top=s.base-1; s.sqsize=sqmax; return 1; } void push(sq &s,char n) { *++s.top=n; } char pop(sq &s) { return *s.top--; } int empty(sq &s) { if(s.top==s.base-1) return 1; else return 0; }