表达式的转换(sdut-2484)

来源:互联网 发布:网络用语及其意思 编辑:程序博客网 时间:2024/05/24 07:15

算术表达式的转换

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问题,今天他想解决一下。
   因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出算术表达式的前缀式和中缀式呢?小明很困惑。聪明的你帮他解决吧。

输入

 输入一算术表达式,以\'#\'字符作为结束标志。(数据保证无空格,只有一组输入)

输出

 输出该表达式转换所得到的前缀式 中缀式 后缀式。分三行输出,顺序是前缀式 中缀式 后缀式。

示例输入

a*b+(c-d/e)*f#

示例输出

+*ab*-c/defa*b+c-d/e*fab*cde/-f*+

醉了 前后缀运算符优先级是不同的 前缀倒着来 后缀正着来

然后pat上的表达式怎么也过不了(っ╥╯﹏╰╥c)

#include <iostream>#include<cstring>#include<cstdio>using namespace std;const int MAXN=10100;char s[MAXN];int cmp1(char a, char b){    if(a=='*' || a=='/') return 1;    else if((a=='+' || a=='-') && (b == '+' || b == '-')) return 1;    else return 0;}int cmp2(char a, char b){    if((a=='*' || a=='/')&& (b == '+' || b == '-')) return 1;    else return 0;}void out(){    int top1 = 0, top2 = 0, i=0;    char st[MAXN],st3[MAXN];    while(s[i] != '#')    {        if(isalpha(s[i])) st3[top1++] = s[i];        else if(top2 == 0) st[top2++] = s[i];        else if(s[i] == '(') st[top2++] = s[i];        else if(s[i] == ')')        {            while(st[top2-1] != '(') st3[top1++] = st[--top2];            --top2;        }        else if(cmp1(st[top2-1], s[i]))        {            st3[top1++] = st[--top2];            st[top2++] = s[i];        }        else        {            st[top2++] = s[i];        }        i++;    }    while(top2 != 0)    {        st3[top1++] = st[--top2];    }    st3[top1]='\0';    cout<<st3<<endl;}void mid(){    int i;    for(i=0;s[i]!='#';++i)    {        if(s[i]!='('&&s[i]!=')')cout<<s[i];    }    cout<<endl;}void in(){    int top1 = 0, top2 = 0, i=strlen(s)-2;    char st[MAXN],st3[MAXN];    while(i>=0)    {        if(isalpha(s[i])) st3[top1++] = s[i];        else if(top2 == 0) st[top2++] = s[i];        else if(s[i] == ')') st[top2++] = s[i];        else if(s[i] == '(')        {            while(st[top2-1] != ')') st3[top1++] = st[--top2];            --top2;        }        else if(cmp2(st[top2-1], s[i]))        {            st3[top1++] = st[--top2];            st[top2++] = s[i];        }        else        {            st[top2++] = s[i];        }        i--;    }    while(top2 != 0)    {        st3[top1++] = st[--top2];    }    for(i=top1-1;i>=0;--i)cout<<st3[i];    cout<<endl;}int main(){    while(cin>>s)    {    in();    mid();    out();    }    return 0;} /**************************************Problem id: SDUT OJ 2484 User name: zhxw150213王文豪 Result: Accepted Take Memory: 480K Take Time: 0MS Submit Time: 2016-03-23 09:36:23  **************************************/






1 0