C语言括号匹配(数据结构)
思路:主要是借助栈对括号进行匹配,遍历整个字符串,若为左括号,则入栈;若为右括号,则判断栈是否为空,以及栈顶元素与当前元素是否匹配;
#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 1;
else
return 0;
}
int Push(SqStack* S, Datatype x)//入栈
{
if (S->top == Maxsize - 1)
return 0;
else
S->data[++(S->top)] = x;
return 1;
}
int Pop(SqStack* S, Datatype* x)//出栈
{
if (S->top == -1)
{
*x = '/0';
return 0;
}
else
*x = S->data[(S->top)--];
return 1;
}
int GetTop(SqStack S, Datatype* x)//取栈顶
{
if (S.top == -1)
return 0;
else
*x = S.data[S.top];
return 1;
}
int Bracketscheck(SqStack* S, char* str,int &i)//匹配
{
InitStack(S);//初始化
char e;
//i = 0;
while (str[i] != '\0')
{
switch (str[i]) {
case '(':
Push(S, '(');
break;
case '{':
Push(S, '{');
break;
case '[':
Push(S, '[');
break;
case ')':
Pop(S, &e);
if (e != '(')
return 0;
break;
case '}':
Pop(S, &e);
if (e != '{')
return 0;
break;
case ']':
Pop(S, &e);
if (e != '[')
return 0;
break;
default:
break;
}
i++;
}
int h = StackEmpty(S);//判断空栈
if (h == 1)
return 1;
else
return 0;
}
int main()
{
int i=0;
SqStack S;
char str[Maxsize];
printf("请输入字符串:");
gets_s(str);//取字符串
//scanf("%s", str);
int h = Bracketscheck(&S, str,i);//匹配
if (h == 1&&strlen(str)==i)
printf("True");
else
printf("False");
return 0;
}
结果样例: