#include<iostream>
using namespace std;
#define MaxSize 10
typedef struct
{
char data[MaxSize];
int top;
}SqStack;
void InitStack(SqStack& S);
bool IsEmpty(SqStack& S);
bool InStack(SqStack& S, char x);
bool OutStack(SqStack& S);
void Instring(char str[],int length);
bool BracketCheck(SqStack& S,char str[], int length);
int main()
{
SqStack S;
char str[MaxSize];
InitStack(S);
cout << "输入字符数量 :" << endl;
int length;
cin >> length;
Instring(str,length);
BracketCheck(S,str, length);
system("pause");
return 0;
}
//初始化栈
void InitStack(SqStack &S)
{
S.top = -1;
}
//判断栈是否为空
bool IsEmpty(SqStack& S)
{
if (S.top == -1)
return true;
else
return false;
}
//入栈
bool InStack(SqStack& S, char x)
{
if (S.top == MaxSize - 1)
{
cout << "栈满 " << endl;
return false;
}
S.top = S.top + 1;
S.data[S.top] = x;
return true;
}
//出栈
bool OutStack(SqStack& S,char &x)
{
if (IsEmpty(S))
{
cout << "栈空!" << endl;
return false;
}
x=S.data[S.top];
S.top--;
return true;
}
//字符串数组写入
void Instring(char str[],int length)
{
cout << "依次输入" << length << "个字符" << endl;
for (int i = 0; i < length; i++)
{
cin >> str[i];
}
}
//括号匹配
bool BracketCheck(SqStack&S,char str[], int length)
{
for (int i = 0; i < length; i++)
{
if (str[i] == '(' || str[i] == '[' || str[i] == '{')
{
InStack(S, str[i]);
}
else
{
if (IsEmpty(S))
{
cout << "匹配失败!"<< endl;
}
char topElem;
OutStack(S, topElem);
if (str[i] == ')' && topElem != '(')
{
cout << "匹配失败!" << endl;
return false;
}
if (str[i] == ']' && topElem != '[')
{
cout << "匹配失败!" << endl;
return false;
}
if (str[i] == '}' && topElem != '{')
{
cout << "匹配失败!" << endl;
return false;
}
}
}
if (IsEmpty(S))
cout << "匹配成功!" << endl;
else
cout << "匹配失败!" << endl;
return IsEmpty(S);
}