括号匹配
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct stack
{
char data[51];
int top;
} Stack;
void push(Stack* S,char x);
char pop(Stack* S);
int main()
{
char input[51];
scanf("%s",input);
int print[3]={1,1,1};
int len=strlen(input);
Stack* S=(Stack*)malloc(sizeof(Stack));
S->top=-1;
for(int i=0; i<len; i++)
{
if(input[i]=='{'||input[i]=='('||input[i]=='[')
{
if(input[i]=='{')
print[2]=0;
else if(input[i]=='(')
print[0]=0;
else if(input[i]=='[')
print[1]=0;
push(S,input[i]);
}
else if(input[i]=='}'||input[i]==']'||input[i]==')')
{
char temp=pop(S);
if(input[i]==')')
{
if(temp=='(')
print[0]=1;
else
{
print[0]=0;
if(temp=='{')
print[2]=0;
else if(temp=='[')
print[1]=0;
}
}
else if(input[i]=='}')
{
if(temp=='{')
print[2]=1;
else
{
print[2]=0;
if(temp=='[')
print[1]=0;
else if(temp=='(')
print[0]=0;
}
}
else if(input[i]==']')
{
if(temp=='[')
print[1]=1;
else
{
print[1]=0;
if(temp=='(')
print[0]=0;
else if(temp=='{')
print[2]=0;
}
}
}
}
while(S->top!=-1)//不为空都弹出来
{
char temp=pop(S);
if(temp=='(')
print[0]=0;
else if(temp=='{')
print[2]=0;
else if(temp=='[')
print[1]=0;
}
if(print[0]==1&&print[1]==1&&print[2]==1)
{
printf("0\n");
}
else
{
for(int i=0;i<3;i++)
{
if(print[i]!=1)
{
printf("%d,",i+1);
}
}
}
return 0;
}
void push(Stack* S,char x)
{
if(S->top<50)
{
S->data[++S->top]=x;
}
else
{
return;
}
}
char pop(Stack* S)
{
if(S->top==-1)
{
//printf("堆栈空\n");
return 0;
}
else
{
return S->data[S->top--];
}
}