| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 723 人关注过本帖
标题:输入“ [ ] ”为什么不匹配,求高手指点
只看楼主 加入收藏
凌云飞翔
Rank: 5Rank: 5
来 自:河北
等 级:职业侠客
威 望:6
帖 子:98
专家分:388
注 册:2012-4-7
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
输入“ [ ] ”为什么不匹配,求高手指点
#include  <stdio.h >
#include <stdlib.h>
#define  OVERFLOW   -2
#define  OK  1
#define STACK_INIT_SIZE   100
#define  STACKINCREMENT  10  
typedef  char SElemType  ;
typedef   int Status   ;   
typedef struct {  
      SElemType  *base   ;
      SElemType  *top    ;
      int  stacksize  ;
}  SqStack    ;
 Status    StackEmpty  (SqStack  s  )
{ if  (s.base==s.top)  return 1;
    else  return 0  ;
} //stackempty
Status  InitStack  (SqStack  &s)
{  s.base=(SElemType  *)malloc (STACK_INIT_SIZE *sizeof (SElemType ))  ;
    if (!s.base)  exit (OVERFLOW )   ;
     s.top = s.base ;
     s.stacksize =STACK_INIT_SIZE ;
     return  OK  ;
}//initstack  
Status  Push (SqStack &s  ,SElemType e  )
{  if (s.top -s.base >=s.stacksize )//栈满,追加存储空间
{   s.base = (SElemType *) realloc (s.base,(s.stacksize +STACKINCREMENT)
                                    *sizeof (SElemType) )  ;
        if (!s.base) exit  ( OVERFLOW ) ;//存储分配失败
        s.stacksize +=STACKINCREMENT  ;
}
         *s.top++=e  ;
        return  OK  ;  
}//push  
 Status Pop  (SqStack  &s  , SElemType *e)
 { if  (s.top==s.base  ) return  0  ;

  *e =*--s.top ;
  return  OK  ;
 }// pop
 Status GetTop (SqStack s  ,SElemType  *e )
 {  if (s.top ==s.base ) return  0   ;
*e = *(s.top-1)  ;
 return  1 ;
 }//gettop
main ()
{  int  i=0  ;
 SqStack    s  ;
    char a[20]  , ch ,e  ;
   InitStack  ( s) ;
printf ("请输入括号且长度不能超过20 :\n")  ;
while ((ch=getchar())!='\n')  
{   a[i]=ch  ;
     i++  ;  
 
}
 for  (i=0 ;a[i]!='\n' ;i++)  
 {  switch  (a[i])
 {        case '(' :  
         case '[' :
         case '{' :
              Push (s ,a[i])  ; break  ;
         case ')' :
         case '}' :  
         case ']' :   
                   if  (StackEmpty  (s ))   
                 {printf ("括号不匹配\n")  ; return  ;}
                else   {  GetTop (s,&e)  ;
                   if ((a[i]-e==1)||(a[i]-e==2))
                       Pop  (s  , &e )  ;
                   else  { printf ("括号不匹配\n");  return ;  }
                }
 }
 }
   if ( StackEmpty (s))  
   printf ("括号匹配\n") ;
    else  printf ("括号不匹配\n") ;
}
        
  
搜索更多相关主题的帖子: top return include 
2012-10-17 17:14
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
标点符号要用英文的

[ 本帖最后由 embed_xuel 于 2012-10-17 17:21 编辑 ]

总有那身价贱的人给作业贴回复完整的代码
2012-10-17 17:18
凌云飞翔
Rank: 5Rank: 5
来 自:河北
等 级:职业侠客
威 望:6
帖 子:98
专家分:388
注 册:2012-4-7
收藏
得分:0 
回复 2楼 embed_xuel
是英文的。。。
2012-10-17 17:23
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-10-17 17:35
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:0 
说说具体的错误吧....我调试了一下代码....感觉没有什么错误啊.....明天再来看看
2012-10-17 22:35
凌云飞翔
Rank: 5Rank: 5
来 自:河北
等 级:职业侠客
威 望:6
帖 子:98
专家分:388
注 册:2012-4-7
收藏
得分:0 
可能逻辑上有错误吧。。辛苦啦
2012-10-18 07:54
pengzhuo2008
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:29
专家分:68
注 册:2012-9-28
收藏
得分:10 
我把你的代码修改了一下,现在貌似是可以输出正确的结果了的。
修改地方主要就是你的那个数组 a
1. 局部变量一定要初始化,否则它里面的内容就是不确定的值。
2. 循环遍历这个数组a的时候, 条件有问题, 我帮你初始化为空的数组,所以我这里就改成了与 '\0' 比较。

#include  <stdio.h >
#include <stdlib.h>
#define  OVERFLOW   -2
#define  OK  1
#define STACK_INIT_SIZE   100
#define  STACKINCREMENT  10  

typedef char SElemType;

typedef int Status;   

typedef struct {  
      SElemType  *base;
      SElemType  *top;
      int  stacksize;
} SqStack;

Status StackEmpty(SqStack  s)
{
    if (s.base==s.top)  
        return 1;
    else  
        return 0  ;
} //stackempty

Status  InitStack(SqStack  &s)
{  
    s.base = (SElemType  *)malloc (STACK_INIT_SIZE *sizeof (SElemType ));
    if (!s.base)  
        exit (OVERFLOW );
    s.top = s.base ;
    s.stacksize = STACK_INIT_SIZE ;
    return  OK  ;
}//initstack  

Status  Push(SqStack &s, SElemType e)
{  
    if (s.top -s.base >=s.stacksize )//栈满,追加存储空间
    {   
        s.base = (SElemType *) realloc (s.base,(s.stacksize +STACKINCREMENT)*sizeof (SElemType));

        if (!s.base)
            exit(OVERFLOW);//存储分配失败
        s.stacksize += STACKINCREMENT  ;
    }
    *s.top++ = e;
    return  OK;  
}//push  

Status Pop(SqStack  &s,  SElemType *e)
{
    if (s.top==s.base)
        return  0;

    *e = *--s.top ;

    return  OK  ;
}// pop

Status GetTop(SqStack s, SElemType  *e)
{  
    if (s.top ==s.base )
        return  0;
    *e = *(s.top - 1);

    return  1 ;
}//gettop


int main ()
{  
    int  i = 0;
    SqStack  s;
   
    char a[20] = "";
    char ch;
    char e;

    InitStack(s);

    printf ("请输入括号且长度不能超过20 :\n")  ;

    while ((ch=getchar())!='\n')  
    {   
        a[i]=ch;
        i++;  
    }

    for  (i=0; a[i]!='\0'; i++)  
    {  
        switch  (a[i])
        {        
            case '(' :  
            case '[' :
            case '{' :
                 Push (s ,a[i]);
                 break;
            case ')' :
            case '}' :  
            case ']' :   
                 if  (StackEmpty(s))   
                 {
                     printf("括号不匹配\n");
                     return  1;
                 }
                 else   
                 {  
                    GetTop (s,&e);

                    if ((a[i]-e==1) || (a[i]-e==2))
                    {
                        Pop(s, &e);
                    }
                    else  
                    {
                        printf ("括号不匹配\n");  
                        return 1;  
                    }
                 }
        }
    }

    if ( StackEmpty (s))  
        printf ("括号匹配\n") ;
    else  
        printf ("括号不匹配\n") ;

    return 0;
}

1+1=2
2012-10-18 08:38
凌云飞翔
Rank: 5Rank: 5
来 自:河北
等 级:职业侠客
威 望:6
帖 子:98
专家分:388
注 册:2012-4-7
收藏
得分:0 
回复 7楼 pengzhuo2008
再帮忙看一下,若输入“][”时,为什么也显示“括号匹配”?辛苦啦。。
2012-10-18 13:37
pengzhuo2008
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:29
专家分:68
注 册:2012-9-28
收藏
得分:0 
运行结果.zip (3.27 KB)


我输入 ][ 时, 显示的是括号不匹配啊
我用的是VC6, 你是怎么操作的呢?

1+1=2
2012-10-18 13:45
凌云飞翔
Rank: 5Rank: 5
来 自:河北
等 级:职业侠客
威 望:6
帖 子:98
专家分:388
注 册:2012-4-7
收藏
得分:0 
回复 9楼 pengzhuo2008
谢啦,可以啦。输入法的问题。。厉害
2012-10-18 17:54
快速回复:输入“ [ ] ”为什么不匹配,求高手指点
数据加载中...
 
   



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

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