C语言括号匹配问题
2016-01-15 00:00
525 查看
摘要: 括号匹配简单实用,尤其在编译器处理程序格式(括号是否匹配)问题上发挥突出作用。
#include <stdio.h> #include <stdlib.h> #include<conio.h> #include<malloc.h> #define OVERFLOW 0 #define ERROR 0 #define OK 1 #define STACKSIZE 100 #define STACKINCREMENT 50 #define OVERFLOW 0 typedef struct { char *top; char *base; int stacksize; }sqstack; int initstack(sqstack *s) { s->base=(char*)malloc(STACKSIZE*sizeof(char)); if(!s->base){exit(OVERFLOW);} s->top=s->base;//->表示的是内容 s->stacksize=STACKSIZE; return OK; } int gettop(sqstack s,char *e) { if(s.top==s.base) return OK; *e=*(s.top-1);//使用top或base用的是“.”,表示指针 return OK; } int push(sqstack *s,char e) { if(s->top-s->base>=s->stacksize) { s->base=(char*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(char)); if(!s->base){exit(OVERFLOW);}//分配不成功,进入exit s->stacksize+=STACKINCREMENT; s->top=s->base+s->stacksize; } *s->top++=e; return OK; } int pop(sqstack *s,char *e) { if(s->top==s->base) return ERROR; *e=*--s->top; return OK; } int stackdestory(sqstack *s) { free(s->base); s->base=NULL; return OK; } int stackempty(sqstack s) { if(s.base==s.top)//表示栈空 return OK; else return ERROR; } /* 转载请注明出处:去转盘网www.quzhuanpan.com */ int main(void) { int flag=1; char e,ch; sqstack s; initstack(&s); //方法,如果没有不匹配的情形,则一直输入,flag=1,打印匹配 //不批配分两种1:一开始就不配,flag=0,不打印 //2:之后有一次不匹配了 // 匹配的话待在栈中,否则出来,flag=0 do { scanf("%c",&ch); switch(ch) { case'{': case'[': case'(':push(&s,ch);break; case'}':if(stackempty(s)) flag=0;//如果栈空,那么肯定不匹配,因为被消 else if(pop(&s,&e)&&e!='{') { &nbs 7fe0 p; flag=0;// 如果是“{”,则不删,否则删,删则肯定不匹配,flag=0 } break; case']':if(stackempty(s)) flag=0; else if( pop(&s,&e)&&e!='[') { flag=0; } break; case')':if(stackempty(s)) flag=0; else if(pop(&s,&e)&&e!='(') { flag=0; } break; } }while(ch!='#'&&flag); if(!stackempty(s)) flag=0;// 如果空,则定不匹配,则flag=0,注意空为真! if(flag) printf("匹配"); else printf("不匹配"); stackdestory(&s); return 0; } /* 转载请注明出处:去转盘网www.quzhuanpan.com */ //备注realloc的原型 //void* mrealloc(void *old_mem_ptr,int new_size) //{ //return realloc(old_mem_ptr,new_size); 返回空 //}
相关文章推荐
- python正则表达式中的括号匹配问题
- 括号匹配问题
- 括号匹配
- 括号匹配
- 打印括号匹配的所有排列
- if语句中的括号匹配检测
- Parentheses Balance——括号匹配
- 愚人节的礼物
- 伪代码:括号匹配
- [栈和队列]括号匹配
- 括号匹配算法的C++代码实现
- C++STL库栈算法的括号匹配
- 检验某符号(如圆括号,方括号,花括号等)是否都成对出现
- (C++)数据结构之括号匹配的问题?
- 括号匹配
- 【数据结构】括号匹配
- LeetCode 20 - Valid Parentheses
- 括号匹配问题,用栈实现
- LeetCode——Valid Parentheses
- LeetCode——Generate Parentheses