7-17 括号匹配 (30 分)

给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。

输入格式:

输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。

输出格式:

如果括号配对,输出yes,否则输出no。

输入样例1:

sin(10+20)

输出样例1:

yes

输入样例2:

{[}]

输出样例2:

no

代码:

 

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
 
int main()
{
	stack<char>s;
	string a;
	int i;
	getline(cin,a);
	for(i=0;i<a.length();i++)
	{
		if(a[i]=='('||a[i]=='['||a[i]=='{')
			s.push(a[i]);
		if(a[i]==')')
		{
			if(!s.empty()&&s.top()=='(')
				s.pop();
			else
			{
				cout<<"no";
				return 0;
			}
		}
		if(a[i]==']')
		{
			if(!s.empty()&&s.top()=='[')
				s.pop();
			else
			{
				cout<<"no";
				return 0;
			}
		}
		if(a[i]=='}')
		{
			if(!s.empty()&&s.top()=='{')
				s.pop();
			else
			{
				cout<<"no";
				return 0;
			}
		} 
	}
	if(s.empty())
		cout<<"yes";
	else
		cout<<"no";
	return 0;
}