栈实现括号匹配

// StackTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

const int MAX_NUM = 100;
class CStack
{
private:
	char chArray[MAX_NUM];//栈的实体
	int nElement;//栈的元素总数

public:
	CStack();
	void push(char ch);//入栈
	char pop();//出栈
	char chTop();//返回栈顶元素
	int nGetElementNum();//返回栈中元素数量
	bool bEmpty();//判断栈是否为空
	void print();//打印栈中元素
};

CStack::CStack()
{
	for (int i=0;i<MAX_NUM;++i)
	{
		chArray[i] = '0';
	}
	nElement = 0;
}

void CStack::push( char ch )
{
	if (nElement>=MAX_NUM-1)
	{
		cout<<"Stack is full."<<endl;
		return;
	}
	chArray[nElement] = ch;
	++nElement;
	cout<<"push element is:"<<ch<<endl;
}

char CStack::pop()
{
	if (nElement==0)
	{
		cout<<"Stack is empty."<<endl;
		return '0';
	}
	--nElement;
	char ch = chArray[nElement];
	cout<<"pop element is:"<<ch<<endl;
	return ch;
}

int CStack::nGetElementNum()
{
	return nElement;
}

bool CStack::bEmpty()
{
	if (nElement==0)
		return true;
	return false;
}

void CStack::print()
{
	cout<<"chArray:";
	for (int i=0;i<nElement;++i)
	{
		cout<<chArray[i];
	}
	cout<<endl;
}

char CStack::chTop()
{
	if (nElement==0)
	{
		cout<<"Stack is empty."<<endl;
		return '0';
	}
	return chArray[nElement-1];
}



int _tmain(int argc, _TCHAR* argv[])
{
	const char ch[MAX_NUM] = "{[(({{[]}}))]}";
	CStack stack;
	int nCount = 0;//栈元素数量
	char chTop;//栈顶元素
	bool bSuccess=true;//是否成功匹配
	int i = 0;
	while (ch[i])
	{
		if (!bSuccess)
		{
			break;
		}
		switch(ch[i])
		{
		case '{':
			stack.push(ch[i]);
			break;
		case '[':
			stack.push(ch[i]);
			break;
		case '(':
			stack.push(ch[i]);
			break;
		case ')':
			nCount = stack.nGetElementNum();
			if (nCount>0)
			{
				chTop = stack.chTop();
				if (chTop=='(')
				{
					stack.pop();
				}
				else
				{
					bSuccess = false;
					cout<<"匹配不成功!"<<endl;
				}
			}
			break;
		case ']':
			nCount = stack.nGetElementNum();
			if (nCount>0)
			{
				chTop = stack.chTop();
				if (chTop=='[')
				{
					stack.pop();
				}
				else
				{
					bSuccess = false;
					cout<<"匹配不成功!"<<endl;
				}
			}
			break;
		case '}':
			nCount = stack.nGetElementNum();
			if (nCount>0)
			{
				chTop = stack.chTop();
				if (chTop=='{')
				{
					stack.pop();
				}
				else
				{
					bSuccess = false;
					cout<<"匹配不成功!"<<endl;
				}
			}
			break;
		default:
			break;
		}
		++i;
	}
	
	if (bSuccess)
	{
		cout<<"匹配成功!"<<endl;
	}


	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值