0
点赞
收藏
分享

微信扫一扫

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

Gaaidou 2022-04-24 阅读 52
  • 在王道书上的队列和栈的应用那一节,个人认为有更好的解决办法,不需要用到栈
  • 王道书上那种解法,遇到字符串如"{ [ } ] "类似的序列会判断出错
#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 条评论