中缀变后缀(nyoj)
来源:互联网 发布:全民枪战刷钻石软件 编辑:程序博客网 时间:2024/06/05 17:11
中缀式变后缀式
时间限制: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<stdio.h>#include<stack>#include<ctype.h>using namespace std;stack<char>stack_char;#define MAXSIZE 1010int main(){int count, i;char str[MAXSIZE];scanf("%d", &count);while(count--){while(!stack_char.empty())stack_char.pop();//将栈清空scanf("%s", str);stack_char.push('=');//首先将栈中压入一个括号,for(i = 0; str[i] != '='; i++){if(isdigit(str[i]) || str[i] == '.'){printf("%c", str[i]); //数字直接打印continue;}if(i > 0 && isdigit(str[i - 1]))printf(" ");switch(str[i]){case '(':stack_char.push(str[i]);break;case '+':case '-':while(stack_char.top() != '(' && stack_char.top() != '='){printf("%c ", stack_char.top());stack_char.pop();}stack_char.push(str[i]);break;case '*':case '/':while((stack_char.top() == '*' || stack_char.top() == '/') && stack_char.top() != '=')//栈顶符号为‘*’‘/’时依次弹栈{printf("%c ", stack_char.top());stack_char.pop();}stack_char.push(str[i]);break;case ')'://栈顶符号依次输出while(stack_char.top() != '('){printf("%c ", stack_char.top());stack_char.pop();}stack_char.pop();}}while(!stack_char.empty()){printf(" %c", stack_char.top());stack_char.pop();}printf("\n");}return 0;}
- 中缀变后缀(nyoj)
- NYOJ-467-中缀式变后缀式(模拟)
- NYOJ 467 中缀式变后缀式(栈)
- NYOJ 467 中缀式变后缀式
- NYOJ-467 中缀式变后缀式
- 中缀式变后缀式(nyoj 467)
- NYOJ--中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- nyoj 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- nyoj 467 中缀式变后缀式 nyoj 257 郁闷的C小加(一)
- 【表达式求值】中缀表达式变后缀+后缀表达式的求法 (NYOJ 35+NYOJ 1272表达式求值)
- NYOJ 257 郁闷的C小加(一)(中缀式变后缀式)
- nyoj-257-郁闷的C小加(一 )中缀式变后缀式
- [LeetCode] Word Search
- 硬链接与符号链接
- Ubuntu 下 配置 jdk1.7
- Cloudera Impala 编译、安装与配置
- leetcode Word Break I II 算法分析
- 中缀变后缀(nyoj)
- 分享一个自定义的View--SimpleClock
- 两台主机可以无需密码而直接互相登录的SSH配置方法
- IE调试工具2
- 大话存储笔记——1~2章
- 浅谈android的selector,背景选择器
- 该月有几天
- 一些机器视觉网站
- Red hat 6.4 ftp服务 500 OOPS:cannot change directory:/root