数据结构实验之栈与队列四:括号匹配
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Example Input
sin(20+10) {[}]
Example Output
yes
no
利用栈的思想遇到({ [时进栈,遇到)] }就看栈顶元素与之是否匹配,匹配栈顶元素则出栈,否则 false
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int tag;
int match(char ST[],char ch,int &k)
{
if(ch==')'&&ST[k]=='('||ch==']'&&ST[k]=='['||ch=='}'&&ST[k]=='{')
{
tag=1;
k--;
}
else
tag=0;
}
int main()
{
char ch[52];
while(gets(ch))
{
char ST[52];
int k=-1;
for(int i=0;ch[i]!='\0';++i)
{
switch(ch[i])
{
case '(':
case '[':
case '{':ST[++k]=ch[i];break;
case ')':
case ']':
case '}': match(ST,ch[i],k);break;
}
}
if(tag&&k==-1)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
下面的是刚开始写的忘记考虑 ( ) ( )这种情况了
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int match(char ST[],int k)
{
if(k==0||k%2!=0)
{
cout<<"no"<<endl;
return 0;
}
int j=k-1;
int i;
for(i=0;i<(k/2);i++)
{
switch(ST[i])
{
case '(':if(ST[j]==')')
j--;
else
{
cout<<"no"<<endl;
return 0;
}
break;
case '[':if(ST[j]==']')
j--;
else
{
cout<<"no"<<endl;
return 0;
}
break;
case '{':if(ST[j]=='}')
j--;
else
{
cout<<"no"<<endl;
return 0;
}
break;
default :
{
cout<<"no"<<endl;
return 0;
}
break;
}
}
//if(i==k/2)
cout<<"yes"<<endl;
return 0;
}
int main()
{
char ch[52];
while(gets(ch))
{
char ST[52];
int k=0;
for(int i=0;ch[i]!='\0';++i)
{
switch(ch[i])
{
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':ST[k++]=ch[i];break;
}
}
ST[k]='\0';
match(ST,k);
}
return 0;
}
/***************************************************
User name: YT1658506207邵雪源
Result: Wrong Answer
Take time: 0ms
Take Memory: 204KB
Submit time: 2017-10-10 17:56:27
****************************************************/