其他分享
首页 > 其他分享> > 2021-10-17

2021-10-17

作者:互联网

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Maxsize 50
typedef char Datatype;
typedef struct{
	Datatype data[Maxsize];
	int top;
}SqStack;
//栈初始化 
void InitStack(SqStack *S)
{
    S->top=-1;  
}
//判断栈空 
int StackEmpty(SqStack *S)
{
    if(S.top==-1)
        return 0;
    else
        return 1;
}
//入栈 
int Push (SqStack *S,Datatype x)
{
    if(S->top==Maxsize-1)//栈满,出错 
        return 0;
    else
        S->data[++S.top]=x;//栈顶指针加1,入栈 
        return 1;
}
//出栈 
int Pop(SqStack *S, Datatype *x)
{
    if(S->top==-1)//栈满,出错 
        return 0;
    else
        *x=S->data[S.top--];//出栈,栈顶指针减一 
    return 1;
}
int Bracketscheck(SqStack *S,char *str)
{
     InitStack(S);
     char e;
     int i=0;
     while(str[i]!='\0')//循环 
     {
     	if(str[i]=='('||str[i]=='['||str[i]=='{')
     	{
		 Push(S,str[i]); //如果有{  (  [  先入栈 
	    }else{
	    	if(StackEmpty(S)) 
	    	   {return 0;
			   }
			char d;
			Pop(S,&d);//用刚进入的字符与刚出栈的字符相比较 
			if(str[i]==')'&&d!='(')
			    return 0;
			if(str[i]==']'&&d!='[')
			    return 0;
			if(str[i]=='}'&&d!='{')
			    return 0;
		}
         i++;
     }
     int h=StackEmpty(S);//如果最后栈空,则匹配 
     if(h==1)
        return 0;
     else
        return 1;
}
int main()
{   
 	SqStack S;
    char str[Maxsize];
    printf("请输入你要匹配的字符串:");
    scanf("%s",str);
    int h=Bracketscheck(&S,str);
    if(h==0)
        printf("括号不匹配");
    else
        printf("括号匹配");
    return 0;
}

标签:10,return,17,SqStack,int,top,else,2021,str
来源: https://blog.csdn.net/qq_57983127/article/details/120813329