码迷,mamicode.com
首页 > 编程语言 > 详细

C语言之括号匹配

时间:2016-01-15 16:02:06      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

#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!=‘{‘)
{
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); 返回空
//}

C语言之括号匹配

标签:

原文地址:http://www.cnblogs.com/worm0707/p/5133324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!