实现简单的花括号配对问题

     为了判断花括号是否成功匹配的问题,我们依然要使用栈的特性。

bool MatchBrackets(char* pStr, int len)
{
	stack<char> Bra;       //在这里我们为了存取花括号,创建了一个栈
	for(int i = 0;i<len;i++)
	{
		if ((pStr[i] == '(')||(pStr[i] == '{')||(pStr[i] == '['))  //当我们读取到左花括号时就将它压进栈内
		{
			Bra.push(pStr[i]);
		}
		else if(pStr[i]==')'|| pStr[i] == '}' || pStr[i] == ']' )   //当我们读取到右花括号时,我们将栈顶元素拿出来,看是否与它匹配
		{
			if (Bra.empty())        //在这里,当我们读到了一个右花括号,但是栈内没有元素时,这个花括号一定是多余的
			{
				cout << "右括号多余!" << endl;
				return false;
			}
			else if(((pStr[i] == ')') && (Bra.top() == '(')) || ((pStr[i] == ']') && (Bra.top() == '[')) || \
				((pStr[i] == '}') && (Bra.top() == '{')))
			{
				Bra.pop();                  //当我们读取到栈顶元素,发现刚好与之对应时,将栈顶元素顶出
			}
			else
			{
				cout << "右括号多余!" << endl;   //剩下情况就为这个右括号多余
				return false;
			}
		}
		else{}
	}
	if (Bra.top() == '(' || Bra.top() == '[' || Bra.top() == '{')
	{
		cout << "左括号多余!" << endl;   //当我们把元素读取完后,发现栈顶还存在左括号,那么它就是多余的了
	}
	return Bra.empty();
}
接下来我们来测试一下这段代码是否正确:


int main()
{
	char str[] = "({()()()}";
	int len = strlen(str);
	bool ret = MatchBrackets(str, len);
	if (ret == 1)
		cout << "匹配成功!";
	else
		cout << "匹配失败!";
	getchar();
	return 0;
}
在这个函数里我们能看出我给出的花括号是第一个左括号多余的

在这里可以看出这个代码是正确的,其他判断也都没有问题,鉴于太多,就不在重复试验了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值