详细括号匹配问题(C++实现)

括号匹配问题

解决括号匹配问题需要利用到栈这种数据结构,关于如何创建一个栈以及它的方法就不说了,下面直接给出解决括号匹配问题的C++代码:

#include<iostream>
using namespace std;
#include"MyStock.hpp";//这是栈模板
int main()
{
	char ch []= "{[()]]}";  //假设给个字符串为这种形式(不匹配)
	MyStack<char>* pStack = new MyStack<char>(20);//利用写的栈模板初始化一个char型的栈,可容纳元素个数自定义,我这里写的20
	if (ch[0] == ')' || ch[0] == ']' || ch[0] == '}') //若首元素为右括号)}],则直接结束程序,括号不匹配
	{
		cout << "括号不匹配" << endl;
		system("pause");
		return 0;
	}
	else
	{
		pStack->Push(ch[0]);    //否则,直接将首元素入栈
	}
	for (int i = 1; i < strlen(ch); i++)  //从第二个元素开始遍历
	{
		switch (ch[i])
		{
		case '(':                  //若其为左括号,则继续入栈
			pStack->Push(ch[i]); 
			break;
		case '[':
			pStack->Push(ch[i]);
			break;
		case '{':
			pStack->Push(ch[i]);
			break;
		case ')':    //若为右括号,则判断其与栈内首元素是否等于其相应的左括号,等于则出栈
			if (pStack->TopElement() == '(')// TopElement()为栈的成员函数,返回栈内首元素
			{
				char elem;
				pStack->Pop(elem);  //Pop()为栈的成员函数,将首元素出栈,并赋给elem,此处的elem只起到接收作用,并无其他作用
			}
			else
			{
				cout << "括号不匹配" << endl;
				system("pause");
				return 0;
			}
			break;
		case ']':
			if (pStack->TopElement() == '[')
			{
				char elem;
				pStack->Pop(elem);
			}
			else
			{
				cout << "括号不匹配" << endl;
				system("pause");
				return 0;
			}
			break;
		case '}':
			if (pStack->TopElement() == '{')
			{
				char elem;
				pStack->Pop(elem);
			}
			else
			{
				cout << "括号不匹配" << endl;
				system("pause");
				return 0;
			}
			break;
		}
	}
	//最后,若栈为空,说明括号匹配,否则不匹配
	if (pStack->StackEmpty())
	{
		cout << "括号匹配" << endl;
	}
	else
	{
		cout << "括号不匹配" << endl;
	}
	delete pStack
	system("pause");
	return 0;
}

后面大家试验有什么不对的地方,欢迎批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值