| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4438 人关注过本帖
标题:四则元算表达式转换为逆波兰式(符号)
只看楼主 加入收藏
李小小小
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-10-4
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
四则元算表达式转换为逆波兰式(符号)
描述:
    假设表达式由单字母整数类型变量和双目四则运算符构成("+","-","*","/"),写一个程序,将一个通常书写形式且书写正确的表达式转换为逆波兰式。

输入:
    输入一个完整的正确的四则运算表达式,长度不超过100(其中仅含有:"("、")"、"a"、"b"和"c"五种字符)。

输出:
    输出这个表达式的逆波兰表达式。注意结尾带回车。

输入样例:
    输入样例一:(a+b)
    输入样例二:((a+b)*(a-c))
    输入样例三:((a*(b+c))-(a/c))

输出样例:
    输出样例一:ab+
    输出样例二:ab+ac-*
    输出样例三:abc+*ac/-
搜索更多相关主题的帖子: 表达式 字母 
2015-10-04 21:38
李小小小
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-10-4
收藏
得分:0 
哪位大神帮忙做一下吧
2015-10-04 21:45
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:20 
自己先写,然后让别人改

剑栈风樯各苦辛,别时冰雪到时春
2015-10-04 21:55
李小小小
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-10-4
收藏
得分:0 
void pop(SqStack &S,int &e){
    if(S.base!=S.top) e=*--S.top;
}
这一段有什么问题呀?调试的时候一直显示错误
2015-10-04 22:37
李小小小
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-10-4
收藏
得分:0 
我自己写的代码,大家帮忙找找错误,运行结果是乱码:
#include <stdio.h>
#include <malloc.h>
#define S_SIZE 100
#define STACKINCREAMENT 10
struct SqStack{
    int *base;
    int *top;
    int stacksize;
};
void InitStack(SqStack &S){
    S.base=(int*)malloc(S_SIZE*sizeof(int));
    S.top=S.base;
    S.stacksize=S_SIZE;
}
int StackEmpty(SqStack S){
    if(S.base==S.top)return 1;
    else return 0;
}
void GetTop(SqStack &S,int &e){
    e=*(S.top--);
}
void push(SqStack &S,int e){
    if(S.top-S.base>=S.stacksize){
        S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int));
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREAMENT;
    }
    *S.top++=e;
}
void pop(SqStack &S,int &e){
    if(S.base!=S.top) e=*--S.top;
}
void InversePolandExpression(char Buffer[],int i){
    SqStack s,t;
    InitStack(s);
    InitStack(t);
    int j=0,e,A[10],h=0,l=0;
    for(j=0;j<i;j++){
        if(Buffer[j]=='(') {
            push(s,Buffer[j]);
            push(t,Buffer[j]);
        }
        else if(Buffer[j]=='a'||Buffer[j]=='b'||Buffer[j]=='c')
                 push(s,Buffer[j]);
             else{
                if(Buffer[j]=='+'||Buffer[j]=='-'||Buffer[j]=='*'||Buffer[j]=='/')
                    push(t,Buffer[j]);
                if(e!=')') {
                    GetTop(s,e);
                    while(e!='('){
                        A[h]=e;
                        h++;
                        pop(s,e);
                        GetTop(s,e);
                    }
                    pop(s,e);
                    for(l=h-1;l>-1;l--)printf("%d",A[l]);
                    GetTop(t,e);
                    while(e!='('){
                        printf("%d",e);
                        pop(t,e);
                        GetTop(t,e);
                    }
                    pop(t,e);
                }
            }
    }
}
int main()
{
    int i=0;
    char Buffer[100];
    gets(Buffer);
    while(Buffer[i]) i++;
    InversePolandExpression(Buffer,i);
    return 0;
}
2015-10-04 22:40
李小小小
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-10-4
收藏
得分:0 
哪位亲可以帮忙看一下,下面是我用数组做的,帮忙找找错,好吗

#include <stdio.h>
#include <math.h>
void InversePolandExpression(char Buffer[],int i){
    int j=0,h=0,l=0,m=0,p=0,n=0;
    char A[50],B[50],C[50],D[50];
    for(j=0;j<i;j++){
        if(Buffer[j]=='(') {
            A[h]=Buffer[j];
            h++;
            B[l]=Buffer[j];
            l++;
        }
        if(Buffer[j]=='a'||Buffer[j]=='b'||Buffer[j]=='c'){
            A[h]=Buffer[j];
            h++;
        }
        if(Buffer[j]=='+'||Buffer[j]=='-'||Buffer[j]=='*'||Buffer[j]=='/'){
            B[l]=Buffer[j];
            l++;
        }
        if(Buffer[j]==')') {
            while(A[h]!='('){
                C[p]=A[h];
                p++;
                h--;
            }
            h--;
            m=p;
            for(p=m-1;p>0;p--) printf("%c",C[p]);
            while(B[l]!='('){
                D[n]=B[l];
                n++;
                l--;
            }
            l--;
            m=n;
            for(n=1;n<m;n++) printf("%c",D[n]);
        }
    }
}
int main()
{
    int i=0;
    char Buffer[100];
    gets(Buffer);
    while(Buffer[i]) i++;
    InversePolandExpression(Buffer,i);
    return 0;
}
2015-10-05 12:27
快速回复:四则元算表达式转换为逆波兰式(符号)
数据加载中...
 
   



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

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