| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1850 人关注过本帖
标题:括号匹配问题
只看楼主 加入收藏
JAYT
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-6-22
结帖率:100%
收藏
 问题点数:0 回复次数:3 
括号匹配问题
#include <stdio.h>
#include <ctype.h>
#include <io.h>
#include <stdlib.h>
#include <process.h>
#include <malloc.h>
#include <limits.h>
#include <math.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;
typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}Sqstack;
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;
}
Status Destroystack(Sqstack *S)
{
    free(S->base);
    S->base=NULL;
    S->top=0;
    S->stacksize=0;
    return OK;
}
Status Gettop(Sqstack S,SElemType *e)
{
    if(S.top==S.base) return ERROR;
    e=S.top-1;
    return OK;
}

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->top=S->base+S->stacksize;
        S->stacksize+=STACKINCREMENT;
    }
    *S->top++=e;
return OK;
}
Status pop(Sqstack *S,SElemType *e)
{
    if(S->top==S->base) return ERROR;
    e=--S->top;
    return OK;
}
int main(void)
{
Sqstack S;
int e,j=0,b=0,c=0;   
char a;
Initstack(&S);
scanf("%s",&a);
Gettop(S,&e);
    switch(a)
        {
        case'(':Push(&S,e); ++j; break;
        case'{':Push(&S,e); ++b; break;
        case'[':Push(&S,e); ++c; break;
        case')':pop(&S,&e); --j; break;
        case'}':pop(&S,&e); --b; break;
        case']':pop(&S,&e); --c; break;
        default:    break;
            
        }
   
    if(j>=1||b>=1||c>=1)
    {
    printf("Extra left brackets\n");
    }
    else if(j<=-1||b<=-1||c<=-1)
    {
    printf("Extra right brackets\n");
    }

    else if(j==0&&b==0&&c==0)
    {
        printf("Brackets match\n");
    }
    else
    {
        printf("Brackets not match\n");
    }
    Destroystack(&S);

return 0;
}问题就是输出结果永远是Extra left brackets,可能是判断条件的问题有没有大佬解决一下咧
搜索更多相关主题的帖子: include 
2017-06-27 11:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
char a;
Initstack(&S);
scanf("%s",&a);
Gettop(S,&e);
    switch(a)
        {
        case'(':Push(&S,e); ++j; break;
        case'{':Push(&S,e); ++b; break;
        case'[':Push(&S,e); ++c; break;
        case')':pop(&S,&e); --j; break;
        case'}':pop(&S,&e); --b; break;
        case']':pop(&S,&e); --c; break;
        default:    break;
            
        }

这里到底是什么逻辑?~是用数组么?~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-27 14:00
JAYT
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-6-22
收藏
得分:0 
回复 2楼 九转星河
栈和switch啊
2017-06-28 08:46
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 JAYT
那个switch只是比较一次就没有了~到底还是逻辑问题~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-28 12:38
快速回复:括号匹配问题
数据加载中...
 
   



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

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