| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1124 人关注过本帖
标题:请教一个问题(后缀表达式求值出了问题)
只看楼主 加入收藏
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
 问题点数:0 回复次数:8 
请教一个问题(后缀表达式求值出了问题)
//中缀表达式转后缀表达式
//(5*(((9+8)*(4*6))+7))
//???'*'与'+'没有按预想的输出
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
    char *base;
    char *top;
}SqStack;

void STACKpop(SqStack *S)
{
    

    printf("%c ",*--S->top);

}

void STACKpush(SqStack *S,char *c)
{
    *S->top=*c;
    S->top++;
}
main(int argc,char *argv[])
{
    char *a=argv[1];
    int i,N;
    SqStack S;
    N=strlen(a);
    S.base=(char *)malloc(N*sizeof(char));
    S.top=S.base;
    for (i=0;i<N;i++)
    {
        if (a[i]==')')
           STACKpop(&S);
        if ((a[i]=='+')||(a[i]=='*'))
           STACKpush(&S,&a[i]);
        if((a[i]>='0')&&(a[i])<='9')
           printf("%c ",a[i]);
    }
    printf("\n");
}

[[it] 本帖最后由 liyanhong 于 2008-10-25 19:15 编辑 [/it]]
搜索更多相关主题的帖子: 后缀 求值 表达 
2008-10-25 16:34
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
[bo][un]liyanhong[/un] 在 2008-10-25 16:34 的发言:[/bo]

//中缀表达式转后缀表达式
//(5*(((9+8)*(4*6))+7))
//???'*'与'+'没有按预想的输出
#include
#include
#include
typedef struct
{
    char *base;
    char *top;
}SqStack;

void STACK(SqStack *S)
 ...

小问题
 printf("%c ",*--S->top);

倚天照海花无数,流水高山心自知。
2008-10-25 16:46
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
c语言里的printf(),scanf(),好像用起来挺复杂的,c早忘光喽...
2008-10-25 16:49
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
这个小问题找了我好长时间……

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-25 16:56
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
运行看输出有好多C就应该会想到是不是哪里输出了C

倚天照海花无数,流水高山心自知。
2008-10-25 16:57
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-25 17:03
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
LS试试在程序里面输入3+4*2
2008-10-25 17:27
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
//后缀表达式求值
////598+46**7+*    结果不是2075  
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
    int *top;
    int *base;
}SqStack;

int STACKpop(SqStack *S)
{
    
    return *(--S->top);

}
void STACKpush(SqStack *S,int d)
{
    *S->top=d;
    S->top++;
}

main(int argc,char *argv[])
{
    char *a=argv[1];
    int i,N;
    SqStack S;
    N=strlen(a);
    S.base=(int *)malloc(N*sizeof(int));
    S.top=S.base;
    for(i=0;i<N;i++)
    {
        if(a[i]=='+')
      STACKpush(&S,(STACKpop(&S)+STACKpop(&S)));
       
       if(a[i]=='*')
           STACKpush(&S,(STACKpop(&S)*STACKpop(&S)));
        
       if((a[i]>='0')&&(a[i]<='9'));
     STACKpush(&S,a[i]-'0');
        
    }  
    printf("%d \n",STACKpop(&S));
}

[[it] 本帖最后由 liyanhong 于 2008-10-25 20:49 编辑 [/it]]

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-25 19:14
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-26 12:49
快速回复:请教一个问题(后缀表达式求值出了问题)
数据加载中...
 
   



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

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