用C实现括号编译器

#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1
#define Stack_Size 50

typedef char StackElementType;
typedef struct
{
	StackElementType elem[Stack_Size];
	int top;
}SeqStack;                          //定义栈 

void InitStack(SeqStack *S)
{
   S->top = -1;
}                                    //初始化


int Push(SeqStack *S,StackElementType X)
{
   if(S->top==Stack_Size-1)
        return 0;
    S->top++;
    S->elem[S->top]=X;
    return TRUE;
}                                   //顺序进栈



int Pop(SeqStack *S,StackElementType *X)
{
	
if(S->top==-1)
return 0;
else
{
*X=S->elem[S->top];
S->top--;
return TRUE;
} 
}                                 //顺序出栈


int GetTop(SeqStack *S,StackElementType *x)
{
if(S->top==-1)
return 0;
else
{
*x=S->elem[S->top];
return TRUE;
}
}                              //读取栈顶元素


int Match(char ch,char str)
{
if(ch=='('&&str==')')
{return TRUE;}
else if(ch=='['&&str==']')
{return TRUE;}
else if(ch=='{'&&str=='}')
{return TRUE;}
else
return 0;
}

int IsEmpty(SeqStack *S)
{
if(S->top==-1)
return 1;

return 0;
}

void BracketMatch(char *str)
{
SeqStack S;int i;char ch;
InitStack(&S);
for(i=0;str[i]!='\0';i++)
{
	switch(str[i])
	{
	case'(':
	case'[':
	case'{':
		Push(&S,str[i]);
		break;
	case')':
		case']':
			case'}':
				if(IsEmpty(&S))
				{printf("\n右括号多余!");return;}
				else
				{
				GetTop(&S,&ch);
				if(Match(ch,str[i]))
                Pop(&S,&ch);
				else
				{printf("\n对应的括号不同类!");return;}
				}

	}
}
if(IsEmpty(&S))
printf("括号匹配\n");
else
printf("\n左括号多余");
}

void main()
{
	char str[6];
	gets(str);
BracketMatch(str);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值