数据结构实验之栈与队列四:括号匹配
题目描述:
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Sample Input
sin(20+10)
{[}]
Sample Output
yes
no
题解:
对左括号入栈,然后遇到右括号,就和栈内的括号进行匹配,若匹配,则出栈。
出现第一个不匹配的情况的时候,则结束循环。
最后需要判断是否把字符串的每一个字符都走一遍循环,若走完,且栈为空,输出 “yes”,否则输出 “no”。
AC代码:
#include <bits/stdc++.h>
using namespace std;
char s[60];
char sta[60];
int main()
{
while(gets(s))
{
int top=0;
int i;
int l=strlen(s);
for(i = 0;i < l;i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{'){
sta[top]=s[i];
top++;
}
else if(s[i]==')'||s[i]==']'||s[i]=='}')
{
if(s[i]==sta[top-1]+1||s[i]==sta[top-1]+2)
{
top--;
}
else
{
break;
}
}
}
if(i == l&& !top)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
原题链接:山理工2134