题目:请编写一个程序来判断输入的括号序列是否合法。
思路:栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,反之,不匹配。
在编程当中我们只会用到三中括号:圆括号(),方括号[]和花括号{},编译器在编译的时候会检查括号是否匹配正确。例如{[()]}、{()[]{}}都是合法的匹配。但是([)]则是不合法的匹配。
#include<stdio.h>
#include<string.h>
int main()
{
char a[101],s[101];//字符串和栈定义
int i,top,len,mid,next;
top=0;//栈的初始化
gets(a);//获取字符串
len=strlen(a);//字符串的长度
mid=len/2-1;//字符串的中点
//将mid前的字符依次入栈
for(i=0;i<=mid;i++)
s[++top]=a[i];
//判断字符串的长度是奇数还是偶数,并找出需要进行字符匹配的起始下标
if(len%2==0)
next=mid+1;
else
next=mid+2;
//开始匹配
for(i=next;i<=len-1;i++){
if(s[top]!='('&&a[i]==')')
break;
if(s[top]!='['&&a[i]==']')
break;
if(s[top]!='{'&&a[i]=='}')
break;
top--;
}
//如果top的值为0,则说明栈内所有的字符都被一一匹配了
if(top==0)
printf("YES!\n");
else
printf("NO!\n");
getchar();getchar();
return 0;
}