括号匹配_关于队列和栈的应用

  • 在王道书上的队列和栈的应用那一节,个人认为有更好的解决办法,不需要用到栈
  • 王道书上那种解法,遇到字符串如"{ [ } ] "类似的序列会判断出错
#include<stdio.h>
#include <string>
#include <iostream>
using namespace std;
bool test(char[]);
int main(){
    char l[5] = "{}[]";
	cout<<test(l)<<endl;
}

bool test(char l[]) {
	int s[3] = { 0,0,0 };//s数组计数,s[0]记录“{”,s[1]记录“[”,s[2]记录“(”
	char ss[6] = { '{','[','(','}',']',')'};

	//先循环记录一遍左括号数量,防止出现如“ { ) ( { [ } } ] ”这种先出现右括号的恶心顺序
	for (int i = 0; i < sizeof(l); i++)
	{
		if (l[i] == ss[0])//匹配"{"
			s[0]++;
		else if (l[i] == ss[1])//匹配"["
			s[1]++;
		else if (l[i] == ss[2])//匹配"("
			s[2]++;
	}
	for (int i = 0; i < sizeof(l); i++)
	{
		if (l[i] == ss[3])//匹配"}"
		{
			if (s[0] == 0)//判断是否左括号用完,右括号有余
				return false;
			s[0]--;
		}
		else if (l[i] == ss[4])//匹配"]"
		{
			if (s[1] == 0)
				return false;
			s[1]--;
		}
		else if (l[i] == ss[5])//匹配")"
		{
			if (s[2] == 0)//判断是否左括号用完,右括号有余
				return false;
			s[2]--;
		}
	}
	return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值