#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;
}
((([[]])))#
匹配成功!!
本问题主要是运用栈的先进后出及在栈顶操作的原理