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 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)