NYOJ 467 中缀式变后缀式【栈】

来源:互联网 发布:淘宝全屏主页 编辑:程序博客网 时间:2024/05/16 07:00

中缀式变后缀式

时间限制: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 / =
来源
数据结构
上传者
mix_math


#include <iostream>#include<cstdio>#include<cstring>#include<stack>#define maxn 1010using namespace std;stack<char>op;int main(){    int n,f;    char s[maxn];    scanf("%d",&n);    while(n--)    {        scanf("%s",s);        int lens=strlen(s);        for(int i=0;i<lens;++i)        {            f=0;            while((s[i]>='0'&&s[i]<='9')||s[i]=='.')                f=1,printf("%c",s[i++]);            if(f)                printf(" ");            if(s[i]=='(')                op.push(s[i]);            else if(s[i]==')')            {                while(op.top()!='(')                {                    printf("%c ",op.top());                    op.pop();                }                op.pop();            }            else if(s[i]=='=')            {                while(!op.empty())                {                    printf("%c ",op.top());                    op.pop();                }                printf("=\n");            }            else if(op.empty())                op.push(s[i]);            else            {                if(s[i]=='+'||s[i]=='-')                {                    while(!op.empty()&&op.top()!='(')                    {                        printf("%c ",op.top());                        op.pop();                    }                    op.push(s[i]);                }                else                {                    while(!op.empty()&&op.top()!='('&&op.top()!='+'&&op.top()!='-')//这类型的判断要记得先判断栈非空 否则可能会出现非法访问 RE                    {                        printf("%c ",op.top());                        op.pop();                    }                    op.push(s[i]);                }            }        }    }    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩老是偷钱怎么办 如果孩子偷钱怎么办 小孩在家偷钱怎么办 买了西晒房怎么办 乳胶漆有打磨痕迹怎么办 墙上乳胶漆用水擦完太亮了怎么办 外墙腻子不好打磨怎么办 腻子打磨的灰尘怎么办 家里的壁纸脏了怎么办 家装用冷风管冬天取暖怎么办? 房子装修冷色系怎么办 高血压突然变低血压怎么办 玩单机游戏卡顿怎么办 老人血压太低怎么办 老年人血压太低怎么办 觉总是不够睡怎么办 老年人气不够用怎么办 卧室晒不到太阳怎么办 农村房子墙角受潮怎么办 房间里面有虫子怎么办 墙壁发霉生虫子怎么办 墙壁发霉有虫子怎么办 墙面发霉有虫子怎么办 白漆墙面脏了怎么办 房间贴完墙墙面发霉怎么办? 家里的墙壁发霉怎么办 黑豆生虫了怎么办 家具有小虫子怎么办 店铺对面有镜子怎么办 房间里有蛆虫怎么办 房间里有虫子怎么办 小宝宝发烧了怎么办啊 小孩不盖被子怎么办 孩子不爱盖被子怎么办 宝宝不喜欢盖被子怎么办 被单上染上颜色怎么办 白漆不够白怎么办 衣柜推拉门门缝宽怎么办 推拉门时声音大怎么办 电子门坏掉了怎么办 厨柜门坏掉了怎么办