标题:我的 括号匹配有什么问题??? 求大家帮忙!!!
只看楼主
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
结帖率:70.59%
已结贴  问题点数:10 回复次数:17 
我的 括号匹配有什么问题??? 求大家帮忙!!!
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
struct brack
{
    char*base;
    char*top;
    int stacksize;
};
void init(struct brack*m);
void push(struct brack*m,char c);
int pop(struct brack*m,char*e);
void main()
{
    char ch,t;
    int flag;
    struct brack sq;
     init(&sq);
    while((ch=getchar())!='\n')
    {
        if(ch=='('||ch=='['||ch=='{')
            push(&sq,ch);
        else if(ch==')'||ch==']'||ch=='}')
        {
            flag=pop(&sq,&t);
            if(flag==0)
                break;
            else if((ch==')')&&(t=='('))
                flag=1;
            else if((ch==']')&&(t=='['))
                flag=1;
            else if((ch=='}')&&(t=='{'))
                flag=1;
            else {
                flag=0;
                break;
            }
        }
    }
   
    if(flag==1)
        printf("match!!!\n");
    else
        printf("not match!!!\n");
}
void init(struct brack*m)
{
    m->base=m->top=(struct brack*)malloc(SIZE*sizeof(struct brack));      就是这一行: : cannot convert from 'struct brack *' to 'char *'
    if(!m->base)
    {printf("cant creat!\n");
    exit(0);
    }
    m->top=m->base;
    m->stacksize=SIZE;
}

void push(struct brack*m,char c)
{
    if((m->top-m->base)==m->stacksize)
        printf("stack full\n");
    else
        *m->top++=c;
}
int pop(struct brack*m,char*e)
{
    int FLAG;
    if(m->top==m->base)
        FLAG=0;
    else{
        *e=*--m->top;
        FLAG=1;
    }
    return FLAG;
}


1.为什么这个程序在TC能运行,到了VC++就显示 : cannot convert from 'struct brack *' to 'char *',这是为什么???
2.我最初都使用的"m.top,m.base",后来改成了“m->top,m->base''才能用,我不太清楚他们的区别
3.void init(struct brack*m);
void push(struct brack*m,char c);
int pop(struct brack*m,char*e);
这些*号,能换成&吗,我不太清楚他们的区别


请高手救我!!!

搜索更多相关主题的帖子: 括号 
2010-11-01 12:59
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
得分:4 
void init(struct brack*m)
{
    m=(struct brack*)malloc(SIZE*sizeof(struct brack));   // 这么改一下   
    if(!m->base)
    {printf("cant creat!\n");
    exit(0);
    }
    m->top=m->base;
    m->stacksize=SIZE;
}

If You Want Something, Go Get It, Period.
2010-11-01 13:05
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
得分:6 
你把"struct brack*"换成"char *"看看
收到的鲜花
  • lizjohn2010-11-01 21:41 送鲜花  2朵  

经验积累中............
2010-11-01 13:06
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
得分:0 
回复 2楼 m21wo
这样后就出现“.exe停止工作,关闭程序”这是为什么呢?为什么最初我在tc上就能运行呢
2010-11-01 13:22
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
得分:0 
我在VS2005 上运行没问题啊!
那你重建一个工程看看

If You Want Something, Go Get It, Period.
2010-11-01 13:24
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
得分:0 
回复 3楼 五当家
怎么可能这样改嘛!你也不看一下我这个程序是干什么呀,朋友?
2010-11-01 13:25
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
得分:0 
回复 5楼 m21wo
不行啊!还是显示
2010-11-01 13:29
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
得分:0 
回复 5楼 m21wo
你这样改后,我在Tc和VC上都不行了?
2010-11-01 13:37
七有新人
Rank: 3Rank: 3
来 自:哈尔滨
等 级:论坛游侠
帖 子:64
专家分:132
注 册:2010-10-12
得分:0 
为什么我感觉这个跟刚才那个是一模一样的。。。。。。。
参见
https://bbs.bccn.net/thread-324584-1-1.html

明白了一点,一个顺序栈用来检验括号匹配的吗?

图!
不一定是真相!
2010-11-01 16:06
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
得分:0 
运行没问题!但数据输入后崩溃

If You Want Something, Go Get It, Period.
2010-11-01 16:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-324613-1-1.html




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

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