数据结构实验之栈四:括号匹配

时间:2021-08-23 06:01:57



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();//要将栈清空
}
}
}