浙江财经大学
信息管理与工程学院

中缀表达式转后缀表达式

本文由 Ocrosoft 于 2016-04-27 10:38:00 发表
编程实现中缀表达式转换为后缀表达式。输出的后缀表达式每个要数值或字符间有空格。
输入:
9+(3-1)*3+10/2
输出:
9 3 1 - 3 * + 10 2 / +
Solution:每次将字符或数字的最后一个字符插入到postexp之后,再插入一个空格。在Trans函数的最后,替换postexp的最后一个字符为'\0',因为那个字符一定是空格。然后在主程序里输出postexp即可。

#include <cstdio>
#include <iostream>
#include <stack>
#include <string>
#include <cstring>
//9+(3-1)*3+10/2
using namespace std;
stack<char> sop;
char s[1200],postexp[1200];
double res;
void Trans()
{
    while(!sop.empty())
        sop.pop();
    int i=0,j=0;
    char ch;
    while(s[i])
    {
        ch=s[i];
        if(ch=='(')
            sop.push(ch);
        else if(ch==')')
        {
            while(!sop.empty()&&sop.top()!='(')
            {
                postexp[j++]=sop.top();
                postexp[j++]=' ';
                sop.pop();
            }
            sop.pop();
        }
        else if(ch=='+'||ch=='-')
        {
            while(!sop.empty()&&sop.top()!='(')
            {
                postexp[j++]=sop.top();
                postexp[j++]=' ';
                sop.pop();
            }
            sop.push(ch);
        }
        else if(ch=='*'||ch=='/')
        {
            while(!sop.empty()&&sop.top()!='('&&(sop.top()=='*'||sop.top()=='/'))
            {
                postexp[j++]=sop.top();
                postexp[j++]=' ';
                sop.pop();
            }
            sop.push(ch);
        }
        else
        {
            while(ch>='0'&&ch<='9')
            {
                postexp[j++]=ch;
                i++;
                if(s[i])ch=s[i];
                else break;
            }
            i--;
            postexp[j++]=' ';
        }
        i++;
    }
    while(!sop.empty())
    {
        postexp[j++]=sop.top();
        postexp[j++]=' ';
        sop.pop();
    }
    j--;
    postexp[j]='\0';
}
int main()
{
    while(gets(s)!=NULL)
    {
        Trans();
        puts(postexp);
    }
    return 0;
}

欢迎分享与转载,请保留链接与出处。Ocrosoft » 中缀表达式转后缀表达式

点赞 (0)or拍砖 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址