首页 > 其他分享 >栈的应用-括号匹配问题

栈的应用-括号匹配问题

时间:2023-02-08 19:46:28浏览次数:32  
标签:return 应用 SqStack char 括号 length str 匹配 cout

#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);

}

 

标签:return,应用,SqStack,char,括号,length,str,匹配,cout
From: https://www.cnblogs.com/promote-L/p/17103070.html

相关文章