话说这道题代码那个丑陋啊,,写出来我自己都不想再看第二遍啊。。。看了看聪神的代码,还消耗我3个NYOJ币啊,,更扯得是,聪神的代码我看不懂啊,,,,卧槽。。。这道题不再多说了,数据结构上有详细的介绍,主要就是输入的时候巧妙利用sscanf()函数就可以了。。题目:

郁闷的C小加(一)

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

描述

我们熟悉的表达式如a+b、a+b*(c+d)等都属于中缀表达式。中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2。同理,后缀表达式就是操作符在两个操作数之后:num1 num2 operand。ACM队的“C小加”正在郁闷怎样把一个中缀表达式转换为后缀表达式,现在请你设计一个程序,帮助C小加把中缀表达式转换成后缀表达式。为简化问题,操作数均为个位数,操作符只有+-*/ 和小括号。

输入
第一行输入T,表示有T组测试数据(T<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个表达式。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。并且输入数据不会出现不匹配现象。
输出
每组输出都单独成行,输出转换的后缀表达式。
样例输入
21+2(1+2)*3+4*5
样例输出
12+12+3*45*+

ac代码:

#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
using namespace std;
struct oper{char op;int level;
}p;
int fun(char cc){if(cc=='+'||cc=='-')return 1;else if(cc=='*'||cc=='/')return 2;else if(cc=='(')return 3;else if(cc==')')return 0;
}
int main(){int numcase;scanf("%d",&numcase);while(numcase--){string str;cin>>str;int len=str.size(),pos=0,ll=0,num=0;char ch;stack<oper> ss;p.op=' ';p.level=0;ss.push(p);while(pos<len){if(str[pos]<='9'&&str[pos]>='0'){sscanf(&str[pos],"%d%n",&num,&ll);printf("%d",num);pos+=ll;}else{sscanf(&str[pos],"%c%n",&ch,&ll);pos+=ll;p.op=ch;p.level=fun(ch);if(p.op==')'){while(ss.top().op!='('){printf("%c",ss.top().op);ss.pop();}ss.pop();}else if(p.level>ss.top().level||ss.top().op=='(')ss.push(p);else{while(p.level<=ss.top().level&&ss.top().op!='('){printf("%c",ss.top().op);ss.pop();}ss.push(p);}}}while(!ss.empty()){printf("%c",ss.top().op);ss.pop();}printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/javaspring/archive/2012/03/24/2656390.html

NYOJ 257 中缀表达式表示成后缀表达式相关推荐

  1. c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)

    逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...

  2. 使用栈实现中缀表达式转换成后缀表达式并计算结果(逆波兰计算器)

    一.中缀表达式转换成后缀表达式 具体步骤如下: 1.初始化栈stack(暂时存放运算符)以及集合list(存放后缀表达式) 2.从左向右扫描中缀表达式 3.当前元素为数字时,直接添加到list中 4. ...

  3. 表达式转换成后缀表达式进行计算

    这是编译原理课上的一个实验,要将输入的表达式转换成后缀表达式,然后进行计算.当时写的程序有错误,改了两天,没有了错误,但还是有些表达式计算不出正确的结果,实在不想改了,等什么时候心情好了,再看看吧. ...

  4. 中缀表达式转换成后缀表达式

    中缀表达式就是我们正常工作中写的表达式,如 a+(b-c)*d ,编译系统将中缀表达式改写 abc-d*+,这种运算符在操作数后面称为后缀表达式(也称逆波兰表达式). 如何实现转换的呢?这里做一下自己 ...

  5. [数据结构考前必看]中缀表达式转化成后缀表达式_例题超多+分步骤讲解+带你手算

    中缀.后缀表达式定义 中缀表达式又称波兰式,有利于人们阅读与表达. 后缀表达式又称逆波兰式,有利于机器进行运算. 例题1: 中缀表达式:(a+b+c*d) /e 首先让我们来看一下运算符对应的优先级, ...

  6. Java 将中缀表达式转换成后缀表达式

    使用堆栈进行表达式的堆栈将中缀(Infix)表达式转换成后缀(postfix)表达式 完整代码 import java.io.IOException;public class InToPost {pr ...

  7. 利用栈将中缀表达式转化成后缀表达式

    目的:将中缀表达式(即标准形式的表达式)转换为后缀式. 例子:a+b*c+(d*e+f)*g转换成abc*+de*f+g*+ 转换原则 1. 遇到操作数, 直接输出 2. 操作符的优先级为 () 最大 ...

  8. 万能计算器——中缀表达式转换成后缀表达式(C++实现)【可以计算小数和负数】

    核心代码与思路: int GetExprValue(vector<string> srcVec) //根据后缀表达式求值 {stack<int> temp;char op = ...

  9. java中的後綴表達式_求Java堆栈,将中缀算术表达式转换成后缀表达式。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...

最新文章

  1. c语言编程之求组合数的和,给定求组合数公式为:C(n,m)=m!/n!(m-n)!,编一程序,输入m和n的值 ,求C(n,m)的值...
  2. python3爬虫入门教程-有什么好的python3爬虫入门教程或书籍吗?
  3. C++ 注册表取值 按行读取txt文件 时间差天数 格林威治时间转标准时间
  4. c语言图片效果,c语言能显示图片吗
  5. 【视频回放与课件】搭上AI快车-在线公益课堂:基于移动应用的人工智能开发...
  6. Redis站点流量统计HyperLogLog
  7. JVM 虚拟机类加载过程和双亲委派机制
  8. 操作系统——进程与线程
  9. gdb 初步学习记录
  10. 区块链 fisco bcos webase-front docker方式部署
  11. 基于java的邮件服务器以及webmail的搭建
  12. 第三方SDK:SMSSDK
  13. WPS的文档上云 是中国式服务的胜利
  14. 数据库:PostgreSQL:客户端安装
  15. Vue+element搭建后台管理系统-二、安装插件
  16. 页面最上方的搜索和logo叫什么_JS实现京东首页之页面顶部、Logo和搜索框功能...
  17. 认证理论与技术——身份认证技术
  18. 详解POW工作量证明原理
  19. Pytorch深度学习笔记(02)--损失函数、交叉熵、过拟合与欠拟合
  20. ecshop 评价仿京东仿淘宝 中评率 好评率 差评率

热门文章

  1. 新瓶旧酒ASP.NET AJAX(6) - 客户端脚本编程
  2. it is important to delete your email mailbox in a frequent manner!
  3. what is love?
  4. introduction to mechanism
  5. linux下Eclipse+CDT开发环境配置与使用
  6. iOS 地图定位 定位
  7. 西数举债千亿收购闪迪 到底图了个啥?
  8. OPPO R11发布盛典昨晚举行,精彩程度不亚于大型晚会!
  9. MAVEN 自定义骨架
  10. 深入浅出jQuery (五) 如何自定义UI-Dialog?