首页 > 其他 > 详细

括号匹配(栈)

时间:2019-06-22 16:18:55      阅读:128      评论:0      收藏:0      [点我收藏+]

在编程当中我们只会用到三种括号:圆括号(),方括号[]和花括号{},编译器在编译的时候会检查括号是否正确匹配。例如{[()]}、{()[]{}}都是合法的匹配。但是([)]则是不合法的匹配。请编写一个程序来判断输入的括号序列是否合法。

根据思路:

技术分享图片

 

#include <stdio.h>
#include <string.h>

int main()
{
int i, j, z, flag;
char a[101], s[101];
memset(s, ‘.‘, sizeof(s));
gets(a);
i = strlen(a);
j = 0;
z = 0;
flag = 0;

while(j < i)
{
if(a[j] == ‘(‘ || a[j] == ‘[‘ || a[j] == ‘{‘ || a[j] == ‘)‘ || a[j] == ‘]‘ || a[j] == ‘}‘) //是括号
{
if(a[j] == ‘(‘ || a[j] == ‘[‘ || a[j] == ‘{‘) //该字符是左括号
{
s[++z] = a[j]; //入栈
j++;
}
else //不是左括号
{
if(s[z] == ‘.‘)//栈为空,右括号比左括号多
{
//printf("右括号比左括号多\n");
flag = 1;
break;
}
else//栈不为空,检测该括号是否与栈顶括号匹配
{
if((s[z] == ‘(‘ && a[j] == ‘)‘) || (s[z] == ‘[‘ && a[j] == ‘]‘) || (s[z] == ‘{‘ && a[j] == ‘}‘)) //匹配,栈顶元素出栈
{
s[z] = ‘.‘;
if(z > 1)
z--;
j++;
}
else //不匹配
{
//printf("括号匹配出错, 退出\n");
flag = 1;
break;
}
}
}
}
else //不是括号
{
j++;
continue;
}

}
if(s[z] != ‘.‘ || flag == 1)
printf("NO\n");
else
printf("YES\n");

return 0;
}

 

括号匹配(栈)

原文:https://www.cnblogs.com/yinyu0906/p/11069169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!