yes
no
= =这题就是一个简单的栈的应用,没有什么好说的,直接上代码。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
int main()
{
char str[55];
while(gets(str)!=NULL)//注意题目中说了有空格,不要用scanf或cin
{
stack <char> a;//创造一个类型为char的栈
int len=strlen(str),flag=1;//flag用来标记能不能匹配,能为1,不能为0
for(int i=0;i<len;i++)
{
if(str[i]=='('||str[i]=='['||str[i]=='{')
a.push(str[i]);//如果是左括号就插入到栈里
else if(str[i]==')'||str[i]==']'||str[i]=='}')//如果是右括号
{
if(a.empty()||(str[i]==')'&&a.top()!='(')||(str[i]==']'&&a.top()!='[')||(str[i]=='}'&&a.top()!='{'))
{ //如果此时栈为空或者栈顶元素与当前元素不匹配,则匹配失败,flag变为0,跳出循环
flag=0;
break;
}
else
a.pop();//如果当前元素与栈顶元素匹配,就将栈顶元素弹出,继续判断下一个
}
}
if(!a.empty()||flag==0) printf("no\n");//如果遍历一遍后栈不为空,即使flag=1字符串中的括号也不匹配(例如"(()"这种情况)
else printf("yes\n");
}
return 0;
}