版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/。未经本作者同意不得转载。 https://blog.csdn.net/kenden23/article/details/24902179

把一般式子转换成逆波兰式。

这里的都是加括号的,难度减少点。

Example

Input:
3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d))) Output:
abc*+
ab+zx+*
at+bac++cd+^*

知道其特点就好办:

1 遇到字母一定是能够输出的

2 遇到操作符号就入栈

3 遇到括号')',就出栈一个操作符 - 注意不是全部操作符出栈

不带括号的操作差别就在于是否须要推断符号的优先级。

#include <stack>
#include <stdio.h>
#include <iostream>
using namespace std; int TransformTheExpression()
{
int T = 0, c = 0, id = 0;
scanf("%d\n", &T);
char buffer[40200];
char res[40200];
stack<char> stk;
if ((c = fread(buffer, 1, 40200, stdin)) > 0)
{
for (int i = 0; i < c; i++)
{
if ('(' == buffer[i]) continue; if ( buffer[i] == '+' || buffer[i] == '-' ||
buffer[i] == '*' || buffer[i] == '/' || buffer[i] == '^')
{
stk.push(buffer[i]);
}
else if (buffer[i] == ')')
{
res[id++] = stk.top();
stk.pop();
}
else res[id++] = buffer[i];
}
}
fwrite(res, sizeof(char), id, stdout);
return 0;
}

codechef Transform the Expression 转换成逆波兰式的更多相关文章

  1. [LeetCode]Evaluate Reverse Polish Notation(逆波兰式的计算)

    原题链接:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ 题目描述: Evaluate the value of a ...

  2. Java 实现《编译原理》中间代码生成 -逆波兰式生成与计算 - 程序解析

    Java 实现<编译原理>中间代码生成 -逆波兰式生成与计算 - 程序解析 编译原理学习笔记 (一)逆波兰式是什么? 逆波兰式(Reverse Polish notation,RPN,或逆 ...

  3. HDU1237 简单的计算器 【堆】+【逆波兰式】

    简单的计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. Evaluate Reverse Polish Notation(逆波兰式)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  5. HDU1237 简单计算器 【栈】+【逆波兰式】

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. NYOJ 35 表达式求值(逆波兰式求值)

    http://acm.nyist.net/JudgeOnline/problemset.php?typeid=4 NYOJ 35 表达式求值(逆波兰式求值) 逆波兰式式也称后缀表达式. 一般的表达式求 ...

  7. javascript:逆波兰式表示法计算表达式结果

    逆波兰式表示法,是由栈做基础的表达式,举个例子: 5 1 2 + 4 * + 3 -  等价于   5 + ((1 + 2) * 4) - 3 原理:依次将5 1 2 压入栈中, 这时遇到了运算符 + ...

  8. Haskell解决逆波兰式

    摘自<Haskell趣学指南- Learn You a Haskell for Great Good> {- 逆波兰式(revese polish notation, RPN): 操作符出 ...

  9. c# 逆波兰式实现计算器

    语文不好,不太会组织语言,希望不要太在意. 如题,先简要介绍一下什么是逆波兰式  通常我们在写数学公式的时候  就是a+b+c这样,这种表达式称为中缀表达式,逆波兰式又称为后缀表达式,例如a+b 后缀 ...

随机推荐

  1. LumiSoft

    SVN: https://svn.lumisoft.ee:8443/svn/LumiSoft_Net/ User: readonly Password: readonly Download: http ...

  2. pom resource配置

    maven pom配置资源resource, make时可自动发布到release目录的 \WEB-INF\classes 下. 解决使用idea时, 每次都需要配置资源文件的手动配置. 具体: &l ...

  3. SQL 文件以及文件组

    1.SQL Server根据分区表名查找所在的文件及文件组实现脚本 --SQL Server根据分区表名查找所在的文件及文件组实现脚本 SELECT fg.name AS FileGroupName ...

  4. 二:SpringMVC知识整理

    springmvc复习: 1.SpringMVC介绍 2.SpringMVC入门程序 1)创建web工程 2)导入jar包 3)在web.xml中配置前端控制器(指定上下文件的路径 classpath ...

  5. redis的持久化方式

    redis有两种持久化方式,第一种是基于快照的持久化方式,第二种是基于文件追加的持久化方式 一.基于快照的持久化 1.修改redis.conf配置文件,开启基于快照的持久化方式 2.修改持久化文件存放 ...

  6. 移动web开发都会遇到的坑(会持续更新)

    1.自适应第一招 <meta name="viewport" content="width=device-width,initial-scale=1.0,user- ...

  7. Web前端面试指导(十三):css样式的优先级是怎么样的?

    题目点评 CSS样式的优先级规则给人的感觉总是摸不透,更不用说怎么去表达了,在网络上流传着很多版本,描述的都很复杂也不全面,看了之后还是不满意.我来给大家介绍一个比较系统.全面有比较容易记住的规则吧! ...

  8. 基础架构之日志管理平台及钉钉&邮件告警通知

    接上一篇,我们继续解释如何把ELK跟钉钉及发送邮件功能结合起来,让我们及时的了解重要日志并快速反馈. Sentinel 安装,项目介绍在https://github.com/sirensolution ...

  9. Excellent JD

    Job description About the role We are looking for a talented engineer who has excellent cloud skills ...

  10. mysqlcppconn之ConnectOptionsMap的使用

    由来 继上一篇文章, 发现之前写的一篇文章中断线重连部分是错误的, 也是现在翻阅了源码才知道 想要自动重连, 必须使用ConnectOptionsMap才可以 但由于官方代码没有做好导出部分的处理, ...