关于括号匹配问题

#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
	char *base;//栈底指针
	char *top;//栈顶指针
	int length;
} SqStack;
int Init(SqStack & S)//初始化栈
{
	S.base = new char[MAXSIZE];//开辟一段MAXSIZE大小的空间
	if (!S.base)
		return -1;
	S.top = S.base;
	S.length = MAXSIZE;
	return 0;
}
int Push(SqStack & S, char e)//将元素存入栈内
{
	if (S.top - S.base == S.length)//判断是否栈满
		return -1;
	*S.top++ = e;
	return 0;
}
char Get(SqStack & S)//取出栈顶元素
{
	if (S.top != S.base)
		return *(S.top - 1);
}
int Pop(SqStack & S, char &e)//删除栈顶元素
{
	if (S.base && S.base != S.top)
		e = *--S.top;
	return 0;
}
int Empty(SqStack & S)//判断栈是否为空
{
	if (S.base != S.top)
		return 0;
	else
		return 1;
}
bool Matching()//算法实现
{
	int flag = -1;
	SqStack S;
	Init(S);
	char ch;
	char x;
	cin >> ch;
	while (ch != '#' && flag)
	{
		switch (ch)
		{
		case '(':
		case '['://若输入内容为“(”和“[”,将其存入栈内
			Push(S, ch);
			break;
		case ')'://若输入内容为“)”,若匹配成功,删除栈顶元素
			if (!Empty(S) && Get(S) == '(')
			{
				Pop(S, x);
			}
			else
				flag = NULL;
			break;
		case ']'://同上
			if (!Empty(S) && Get(S) == '[')
			{
				Pop(S, x);
			}
			else
				flag = NULL;
			break;
		}
		cin >> ch;
	}
	if (Empty(S) && flag == -1)
		return true;
	else
		return false;
}
int main()
{
	if (Matching())
		cout << "匹配成功!!" << endl;
	else
		cout << "匹配失败!!" << endl;
	system("pause");
	return 0;
}
((([[]])))#
匹配成功!!
本问题主要是运用栈的先进后出及在栈顶操作的原理
    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/weixin_41856902/article/details/80390909
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞