括号配对问题

描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No

Yes


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

#include "stdafx.h"
#include<stack>
#include<iostream>
using namespace std;
bool bracketmatch(char*in);
int _tmain(int argc, _TCHAR* argv[])
{
	char*a = "[(]([[]()]))";
	if(bracketmatch(a))
		cout<<"匹配"<<endl;
	else
		cout << "不匹配" << endl;
	system("pause");
	return 0;
}

bool bracketmatch(char*in)
{
	stack<char>a, b;
	while (*in != '\0')
	{
		if (*in == '(')
			a.push('(');
		if (*in == '[')
			b.push('[');
		if (*in == ')')
		{
			if (a.top() == '(')
				a.pop();
			else
				return false;
		}
		if (*in == ']')
		{
			if (b.top() == '[')
				b.pop();
			else
				return false;
		}
		in++;
	}
	return true;
}


版权声明:

posted on 2015-07-04 19:40  moffis  阅读(106)  评论(0编辑  收藏  举报

导航