| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1953 人关注过本帖
标题:只要输出 )] 这两个括号右边结果一定是匹配失败
只看楼主 加入收藏
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
结帖率:100%
收藏
 问题点数:0 回复次数:7 
只要输出 )] 这两个括号右边结果一定是匹配失败
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef struct {
    char aa;
}ch;
typedef struct sq{
    struct sq *next;
    ch ch1;
}sq;
sq *InitStack(sq *le){
    le=NULL;
    return le;
}
sq *Push(sq *le,ch *cha){
    sq *le1;
    le1=(sq *)malloc(sizeof(sq));
    if(le1==NULL){
        printf("增加节点失败了");
        exit(1);
    }
    //*le1->ch1=*cha;
    le1->next=le;
    le1->ch1=*cha;
    le=le1;
    return le;
}
sq *Pop(sq *le,ch *cha){
    if(NULL==le){
        printf("站空了,不能出站");
        exit(1);
    }
    sq *le1;
    le1=le;
    *cha=le->ch1;
    le=le->next;
    free(le1);
    return le;
}
ch GetHead(sq *le){
    if(le==NULL){
        printf("站为空,不能取站定元素");
        exit(1);
    }
    return le->ch1;
}
int StackEmpty(sq *le){
    if(NULL==le)
        return TRUE;
    else
        return FALSE;
}
int main(){
    sq *le;
    int chr;
    int flag=1;
    ch *cha;
    le=InitStack(le);
    while('#'!=(chr=getchar()) && flag){
        //if('#'!=(chr=getchar()) && flag){
            switch(chr){
                case '[':
                case '(':
                    cha=(ch *)malloc(sizeof(ch));//需要申请地址空间用于储存内容
                    if(NULL==cha){
                        printf("申请空间地址为空");
                        exit(1);
                    }
                    cha->aa=chr;
                    le=Push(le,cha);
                    free(cha);
                    break;
                case ')':
                    if(!StackEmpty(le)&&')'==GetHead(le).aa){//
                        le=Pop(le,cha);
                        printf("%c ",cha->aa);//
                    }
                    else
                        flag=0;
                    break;
                case ']':
                    if(!StackEmpty(le)&&']'==GetHead(le).aa){
                        cha=(ch *)malloc(sizeof(ch));//需要申请地址空间用于储存内容
                        if(NULL==cha){                //
                            printf("申请空间地址为空");
                            exit(1);
                        }
                        le=Pop(le,cha);
                        printf("%c ",cha->aa);
                        free(cha);
                    }
                    else
                        flag=0;
                    break;           
            }
        //}
    }
    if(!StackEmpty(le) && flag)
        printf("匹配成功");
    else
        printf("匹配失败");
}
搜索更多相关主题的帖子: NULL return printf exit flag 
2019-04-07 22:36
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
收藏
得分:0 
大佬 帮忙下  啊啊

2019-04-07 22:36
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
收藏
得分:0 
回了 大哥们

2019-04-08 08:51
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:396
专家分:2640
注 册:2018-3-30
收藏
得分:0 
if(!StackEmpty(le)&&')'==GetHead(le).aa){//把')'改为 '('   下边中括号也一样

还有你的栈Pop函数有问题,不能释放。
栈结构改为带头结点的栈比较好用。

saber,别哭.
2019-04-08 09:34
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
收藏
得分:0 
回复 4楼 幻紫灵心
应该可以释放吧
2019-04-08 12:14
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
收藏
得分:0 
回复 4楼 幻紫灵心
不释放内存容易泄露
2019-04-08 12:15
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:0 
//栈为空应该才匹配成功吧
if(StackEmpty(le) && flag)
        printf("匹配成功");
2019-04-08 16:16
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
收藏
得分:0 
回复 7楼 word123
shide xiexie
2019-04-08 23:47
快速回复:只要输出 )] 这两个括号右边结果一定是匹配失败
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034779 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved