Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10){[}]
示例输出
yesno
提示
来源
ma6174
示例程序
#include<iostream>
#include<stdio.h>
#include<stack>
using namespace std;
int main()
{
char a[51];
stack<char>f;
while (gets(a))//用cin遇上空格会分成两个字符串
{
for(int i=0; a[i]!='\0'; ++i)
{
if(a[i]=='('||a[i]=='['||a[i]=='{')
{
f.push(a[i]);
}
else if(a[i]==')'||a[i]==']'||a[i]=='}')
{
if (f.empty())
{
f.push(a[i]);
}
else
{
if((a[i]==')'&&f.top()=='(')||(a[i]==']'&&f.top()=='[')||(a[i]=='}'&&f.top()=='{'))
{
f.pop();
}
else if((a[i]==')'&&f.top()!='(')||(a[i]==']'&&f.top()!='[')||(a[i]=='}'&&f.top()!='{'))
f.push(a[i]);
}
}
}
if(f.empty())
cout<<"yes"<<endl;
if(!f.empty())
{
cout<<"no"<<endl;
while(!f.empty())
f.pop();//要将栈清空
}
}
}