案例3.2括号匹配的检验
案例描述
代码实现
#pragma once
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
char* base;
char* top;
int stacksize;
}SqStack;
void InitStack(SqStack& S)
{
S.base = new char[MAXSIZE];
if (!S.base)
{
exit(1);
}
S.top = S.base;
S.stacksize = MAXSIZE;
}
bool StackEmpty(SqStack S)
{
if (S.top == S.base)
{
return true;
}
else
{
return false;
}
}
void Push(SqStack& S, int e)
{
if (S.top - S.base == S.stacksize)
{
cout << "栈满" << endl;
exit(0);
}
*S.top = e;
*S.top++;
}
void Pop(SqStack& S, char& e)
{
if (StackEmpty(S))
{
cout << "栈空" << endl;
exit(0);
}
S.top--;
e = *S.top;
}
int GetTop(SqStack S)
{
if (S.top!=S.base)
{
return *(S.top-1);
}
}
bool Matching(SqStack& S)
{
char e;
InitStack(S);
int flag = 1;
cout << "请输入字符(以“#”结尾):" << endl;
char ch;
cin >> ch;
while (ch != '#' && flag)
{
switch (ch)
{
case '[':
case '(':
Push(S, ch);
break;
case ')':
if (!StackEmpty(S) && GetTop(S) == '(')
Pop(S, e);
else
flag = 0;
break;
case ']':
if (!StackEmpty(S) && GetTop(S) == '[')
Pop(S, e);
else
flag = 0;
break;
}
cin >> ch;
}
if (StackEmpty(S) && flag)
{
return true;
}
else
{
return false;
}
}
int main()
{
SqStack S;
if (Matching(S))
{
cout << "匹配成功"<<endl;
}
else
{
cout << "匹配失败"<<endl;
}
system("pause");
return 0;
}
运行结果