xiaohuanghuang_ 2021-03-15 21:39 采纳率: 73.3%
浏览 29
已采纳

为什么‘{’能让‘】’出栈?

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 [(])也能通过,目的是符号配对,想知道哪里错了?

  • 写回答

2条回答 默认 最新

  • include_iostream_ 2021-03-15 22:13
    关注

    你这第二三四行就意义不明啊。。。你是不是想让if判断所有条件都成立?如果是的话,得用&&逻辑与,不能用逗号。

    根据逗号表达式的语法,你的2、3、4行中写的a=='{'、a=='['、a=='('表达式都毫无意义(对if的判断毫无影响,也不产生任何赋值效果,换言之,除了无意义地损耗CPU性能外,这三个表达式跟不存在没有任何区别)。我建议你在进一步学习算法前再刷一刷语法基础的题目,不然debug会很麻烦。

    ====扩展阅读====

    C/C++中的逗号表达式是一类特殊表达式,它仅仅有顺序执行一定语句的作用,表达式之间没有逻辑关系。

    逗号表达式的值为逗号所连接的表达式中的最后一个表达式的值。

    放在if中时,conditionA, conditionB这个逗号表达式的值只与conditionB的值有关。

    辨析:假设有A,B两个布尔表达式:

    A || B:表达式A一定会被求值。若A为真,整个表达式为真,B不会被求值(B含有的函数等不会被调用)(短路规则)。否则,B会继续被求值。

    A && B:表达式A一定会被求值。若A为假,整个表达式为假,B不会被求值(短路规则)。否则,B会继续被求值。

    A, B:A和B都会被求值(没有短路规则),且整个表达式的值只与B有关。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用