【栈】括号匹配问题——利用栈来实现

本文详细介绍了括号匹配的几种失败情况,并提供了一段C++代码实现,用于检查括号串是否匹配成功。通过遍历字符串,将左括号压栈,遇到右括号时尝试匹配栈顶的左括号,最终根据栈的状态判断括号是否匹配成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

括号匹配失败的几种情况:

代码实现如下,可根据需要改定:


括号匹配失败的几种情况:

1、左括号单身:匹配完成后栈内还存在左括号;

2、右括号单身:匹配完成后,栈空,右括号无与之匹配的左括号;

3、左右括号不匹配:右括号的栈顶不为与之匹配的左括号;

代码实现如下,可根据需要改定:

#include<bits/stdc++.h>
using namespace std;
/*stack<int> s;
stack< int, vector<int> > stk;  //覆盖基础容器类型,使用vector实现stk
s.empty();  //判断stack是否为空,为空返回true,否则返回false
s.size();   //返回stack中元素的个数
s.pop();    //删除栈顶元素,但不返回其值
s.top();    //返回栈顶元素的值,但不删除此元素
s.push(item);   //在栈顶压入新元素item
*/
int Match(stack<char> &ss,char Leftkuohao, int& flag)//括号匹配函数
{
	if (!ss.empty() && ss.top() == Leftkuohao) //如果栈不为空且栈顶元素与右括号匹配
	{
		ss.pop(); //栈顶元素(右括号)出栈
		flag--;
		return 1;
	}
	else
	{
        //匹配失败
		return 0;
	}
}
int main()
{
	string s; //括号串
	stack<char> ss; 
	while (cin >> s)
	{
		int flag = 0; //匹配标志
		for (char c : s)  //遍历一次字符串
		{
			if (c == '(' || c == '{' || c == '[') //左括号进栈
			{
				ss.push(c);
				flag++;
				continue; //左括号进栈后跳出for循环,继续遍历字符串
			}
			if (c == ')')
			{
				if (Match(ss, '(', flag)==1)  
					continue;
				else 
					break;
			}
			if (c == '}')
			{
				if (Match(ss, '{', flag)==1)
					continue;
				else
					break;
			}
			if (c == ']')
			{
				if (Match(ss, '[', flag)==1)
					continue;
				else
					break;
			}
		}
		if (flag==0)
			cout << "括号匹配成功!" << endl;
		else
			cout << "括号匹配失败!" << endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值