您的位置:首页 > 其它

字符串括号匹配检查

2012-09-24 19:33 155 查看
// IsMatch.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

struct CharStack
{
	struct Node
	{
		Node(char c)
		{
			this->c=c;
			this->pNext=NULL;
		}
		char c;
		struct Node *pNext;
	};

	struct Node *pTop;
	CharStack()
	{
		pTop=NULL;
	}
	void push(char c)
	{
		Node* pNode=new Node(c);
		if(pTop==NULL)
		{
			pTop=pNode;
		}
		else
		{
			pNode->pNext=pTop;
			pTop=pNode;
		}

	}
	char pop()
	{
		if(pTop==NULL)
			return '\0';
		else
		{
			char c=pTop->c;
			Node* pTmp=pTop;
			pTop=pTop->pNext;
			delete  pTmp;
			return c;
		}
	}
};

bool isMatch(char* str)
{
	CharStack stack;
	char *p=str;
	char popchar;
	while(*p!='\0')
	{

		switch(*p)
		{
		case '(':
		case '[':
		case '{':
		case '<':
			stack.push(*p);
			break;
		case ')':
			{
			popchar=stack.pop();
			if (popchar!='(')
				return false;
			}
			break;
		case ']':
			{
			popchar=stack.pop();
			if (popchar!='[')
				return false;
			}
			break;
		case '}':
			{
			popchar=stack.pop();
			if (popchar!='{')
				return false;
			}
			break;
		case '>':
			{
			popchar=stack.pop();
			if (popchar!='<')
				return false;
			}
			break;
		default:
			break;
		}
		/*
		if(*p=='(')
		{
			stack.push(*p);
		}
		else if(*p==')')
		{
			char popchar=stack.pop();
			if (popchar!='(')
				return false;
		}
		*/

		p++;
	}

	if(stack.pop()=='\0')
		return true;
	else
	{
		while(stack.pop()!='\0');
		return false;
	}
		
}

int main(int argc, char* argv[])
{
	
	bool bans=isMatch(argv[1]);

	if(bans)
	{
		printf("Yes!\n");
	}
	else
	{
		printf("No!\n");
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: