NYOJ 467 中缀式变后缀式

来源:互联网 发布:淘宝组装电脑店铺 编辑:程序博客网 时间:2024/04/29 10:25

做了表达式求值那道题之后做的


时间限制:1000 ms  |  内存限制:65535 KB

难度:3

  • 描述

  • 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。

    • 输入

    • 第一行输入一个整数n,共有n组测试数据(n<10)。
      每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
      数据保证除数不会为0

    • 输出

    • 每组都输出该组中缀式相应的后缀式,要求相邻的操作数操作符用空格隔开。

    • 样例输入

    • 21.000+2/4=((1+2)*5+1)/4=
    • 样例输出

    • 1.000 2 4 / + =1 2 + 5 * 1 + 4 / =


#include <iostream>#include <cstring>#include <string>#include <stack> using namespace std; int prio(char x){    if('+'==x || '-'==x)        return 1;    else if('*'==x || '/'==x)        return 2;    return 0;} int main(){    int n,i;    string s1,s2;    stack<char> s;    cin>>n;    while(n--)    {        cin>>s1;        s2="";        for(i=0,s.push('=');i<s1.length()-1;i++)        {            if('('==s1[i])                s.push(s1[i]);            else if(')'==s1[i])            {                while(s.top()!='(')                {                    s2+=s.top();                    s2+=' ';                    s.pop();                }                s.pop();            }            else if('+'==s1[i] || '-'==s1[i] || '*'==s1[i] || '/'==s1[i])            {                while(prio(s.top())>=prio(s1[i]))    //!!!这个地方容易把 prio(s1[i]) 写成 s1[i]                {                    s2+=s.top();                    s2+=' ';                    s.pop();                }                s.push(s1[i]);            }            else            {                while(isdigit(s1[i]) || '.'== s1[i])                    s2+=s1[i++];                i--;                s2+=' ';            }        }        while(s.top()!= '=')        {            s2+=s.top();            s2+=' ';            s.pop();        }                 s2+=s.top();        s.pop();         cout<<s2<<endl;    }    return 0;}


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 注册商标有近似商标怎么办 电话话打不通怎么办 公司卖了商标怎么办 商标撕不下来怎么办 商标撕不下来时怎么办 商标还没下来怎么办 商标揭不下来怎么办 手机程序出现异常怎么办 公众号企业名称是*怎么办 家人生命受到威胁怎么办 海淘看不懂英文怎么办 对英语不感兴趣怎么办 装修无合同起诉怎么办 上海离职后档案怎么办 公司注销了银行帐户怎么办 360借条注销了怎么办 注销营业执照公章丢失怎么办 工厂招聘信息有假怎么办 个体餐饮怎么办核名 见父母后接下来怎么办 工商核名重名怎么办 核名通知书过期怎么办 包头鼎太风华怎么办 用人单位不续签劳动合同怎么办 全是英文看不懂怎么办 孩子智力发育晚怎么办 公司比赛成绩不好怎么办 解压手续过期了怎么办 违章通知单丢了怎么办 住在朋友家怎么办暂住证 告知单丢了怎么办 身份证丢了怎么办暂住证 合肥居住证失效了怎么办 异地办牌照暂住证怎么办 外地牌照上保险怎么办 住公租房怎么办暂住证 暂住证怎么办 异地学车 外地人怎么办北京市工作居住证 电大挂科很多怎么办 南通电大挂科怎么办 大学出现挂科怎么办