您的位置:首页 > 理论基础 > 数据结构算法

[2134]数据结构实验之栈四:括号匹配 sdutOJ

2014-08-12 08:34 246 查看



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




Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^


题目描述

给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的(
) ,[ ],{ }是否匹配。

输入

输入数据有多组,处理到文件结束。

输出

如果匹配就输出“yes”,不匹配输出“no”

示例输入

sin(20+10)
{[}]


示例输出

yes
no


本题主要运用栈的思想,先将遇到的“(”“{”“【”入栈,下面若遇到与其匹配的括号就把它置零,先让初始标记flag=0,若不匹配就让标记flag=1,退出循环;若最后标记flag=0,栈为空就说明字符中的括号全都匹配,输出“yes”,否则就输出“no”。

#include <stdio.h>

#include <string.h>

int main()

{

char str1[55],str2[55];

memset(str2,0,sizeof(str2));

int n,i,k,flag;

char s;

while(gets(str1))

{

flag=0;

k=0;

n=strlen(str1);

for(i=0;i<n;i++)

{

if(str1[i]=='('||str1[i]=='['||str1[i]=='{')//若字符为括号前半部分,则让它进栈

{

str2[k++]=str1[i];

}

else if(str1[i]==')')

{

if(str2[k-1]==0)//若栈为空,则让标记为1,结束循环

{

flag=1;

break;

}

else

{

s=str2[k-1];

if(s=='(')//若前一个字符与其匹配,就让前一个字符出栈

{

str2[k-1]=0;

k--;

}

else

{

flag=1;

break;

}

}

}

else if(str1[i]==']')

{

if(str2[k-1]==0)

{

flag=1;

break;

}

else

{

s=str2[k-1];

if(s=='[')

{

str2[k-1]=0;

k--;

}

else

{

flag=1;

break;

}

}

}

else if(str1[i]=='}')

{

if(str2[k-1]==0)

{

flag=1;

break;

}

else

{

s=str2[k-1];

if(s=='{')

{

str2[k-1]=0;

k--;

}

else

{

flag=1;

break;

}

}

}

if(flag==1)

break;

}

if(flag==0&&str2[0]==0)

printf("yes\n");

else

printf("no\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: