bool match(char a,char b){
if(a=='(',b==')') return true;
if(a=='{',b=='}') return true;
if(a=='[',b==']') return true;
return false;
}
void main()
// 利用stack栈判断括号是否匹配
// 输入参数:字符串序列,字符串长度
// 若匹配输出YES,否则输出NO,末尾换行
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int q,i=0,flag=1;
scanf("%d",&q);
char *s=(char*)malloc(q*sizeof(char));
scanf("%s",s);
Stack *a;
a=Stack_Create(q); //q为长度,栈是顺序储存的栈
while(s[i]!='\0'){
switch(s[i]){
case'(':
case'{':
case'[':Stack_Push(a,s[i]);break; //压入s[i]
case')':
case'}':
case']':if(match(Stack_Top(a),s[i]))
Stack_Pop(a);
else{
printf("NO\n");
flag=0;
break;
}
default:;
}
if(flag==0)break;
i++;
Stack_Print(a); //检查错误用的
}
if(Stack_IsEmpty(a))printf("YES\n%d",i); //i是检查错误用的
getch();
/********** End **********/
}
如图输入4 [(])也能通过,目的是符号配对,想知道哪里错了?