#include"Stack.h"
using namespace std;
bool parent(const char exp[], int lo, int hi)
{
//表达式括号匹配检查,可兼顾三种括号
Stack<char>S;//使用栈记录已发现但现尚未匹配的左括号
//cout << S.empty() << endl;
for (int i = lo; i <= hi; i++)
{
//逐一检查当前字符
switch (exp[i])
{
//左括号直接进栈;右括号若与栈顶失配,则表达式必不匹配
case '(':
case '[':
case '{':
case '<':
case '《':
{
S.push(exp[i]);
break;
}
case '》':
{
if ((S.empty()) || '《' != S.pop())
{
return false;
}
break;
}
case '>':
{
if ((S.empty()) || '<' != S.pop())
{
return false;
}
break;
}
case ')':
{
if ((S.empty()) || '(' != S.pop())
{
return false;
}
break;
}
case ']':
{
if ((S.empty()) || '[' != S.pop())
{
return false;
}
break;
}
case '}':
{
if ((S.empty()) || '{' != S.pop())
{
return false;
}
break;
}
default:
break;
}
}
return S.empty();
}
int main()
{
const char *s = "()()()<><><><>《》《》";
string res = (parent(s, 0, 15) == true ? "matched" : "not matched");
cout<<(res);
system("pause");
return 0;
}
005.利用栈实现括号匹配算法(迭代版)
最新推荐文章于 2020-09-14 21:01:30 发布
本文介绍了一种使用栈数据结构实现的括号匹配算法,该算法能有效检查包含多种括号类型的表达式是否正确匹配。通过遍历字符串,将左括号压入栈中,遇到右括号时与栈顶元素进行比较,确保每一对括号都能正确闭合。
789

被折叠的 条评论
为什么被折叠?



