括号匹配算法实现(c语言)

标题括号匹配算法实现(c语言)

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define size 50
typedef struct{
	char elem[size];
	int top;
}seqstack ;
void initStack(seqstack *s)
{
	s->top=-1;
}
int Push(seqstack *s,char str)
{	int i=0;
	if(s->top==size-1) return 1;
	else if (str!='\0')
    {
    		s->top++;
	    s->elem[s->top]=str;
	   
	}
	
	return 0;
}
int pop(seqstack *s ,char *str)
{
	if(s->top==-1) return 1;
	else {
	
	 *str=s->elem[s->top];
	  printf("%c",*str);
	 s->top--;
	 
	}
	return 0;
}
int gettop(seqstack *s,char *ch)
{	

	if(s->top==-1) return 1;
	else{
	
		*ch=s->elem[s->top];
		
		return 1;	    
	}	
}
_Bool  Match(char ch,char str)
{
	if((ch=='<'&&str=='>')||(ch=='{'&&str=='}')||(ch=='('&&str==')'))
	return 1;
	else
	return 0;
}
_Bool isEmpty(seqstack *s)

{
	if(s->top==-1) return 1;
	else return 0;
}
void brackMatch(char *str)
{
	seqstack s,*p;
	int i;
	char ch,sh;
	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右括号多余");
			}
			else{
				gettop(&s,&ch);
				if(Match(ch,str[i]))
				{
					pop(&s,&sh);
				}
				else
				{
					printf("\n对应的括号不匹配"); 
					return;
				}
			}
				
		}
					
	}
		if(isEmpty(&s))
		{
			printf("\n括号匹配");
		}
		else
		printf("\n左括号多余");
}
int main(){
	char str[100], enter,ch;
	seqstack s;
	initStack(&s);
	printf("请输入字符串:\n");
	scanf("%s",str);
	scanf("%c",&enter);
	brackMatch(str); 	
	printf("\n");
		
}

反馈

  1. 这个意外的发现,布尔型:类型名字为“_Bool”的话编译器也可以辨认为布尔类型。前辈写的可以参考下
  2. 少乱想,多思考,勤动手。

猜你喜欢

转载自blog.csdn.net/weixin_43904021/article/details/87081029