PAT 表达式转换
来源:互联网 发布:淘宝模特拍摄价格 编辑:程序博客网 时间:2024/05/24 00:47
思路其实都是一样,主要主要细节
如-2*(+3)这样的需要考虑正负号
如1.236*4.5需要考虑小数点
如123这样的考虑数需要连贯
下面附上代码和测试数据
-2*(+2) .-------- -2 2 *
1.236*2.368--------------- 1.236 2.368 *
((4+5)*9-(8+2))/5 ---------------- - 4 5 + 9 * 8 2 + - 5 /
123456 -------------- 123456
下面附上代码
#include <iostream>#include <sstream>#include <cstring>#include <stack>#include <queue>using namespace std;int PriOrity(char c,char d){ if(c == '+' || c == '-'){ return 0; }else{ if(d == '+' || d == '-'){ return 1; }else{ return 0; } }}bool isNum(char c){ if(c <= '9' && c >= '0'){ return true; } return false;}int main(){ string s; string k; cin>>s; stack<char> dev; char out[5050]; int t = 0; for(int i = 0 ;i < s.length() ;i++){ if(s[i] == '-' && !isNum(s[i-1]) || s[i] == '-' && i == 0 ){//判断Y的是不是一个负数 out[t++] = s[i];//是-号的话就直接放进去 continue; }else if(isNum(s[i])){//判断数字 while(isNum(s[i])||s[i] == '.'){//如果是数字或者小数点,通通放进去 out[t++] = s[i]; i++; } out[t++] = ' ';//加个空格区分 i--; }else if(s[i] == '+' && s[i-1] == '('){//如果是类似+2的情况不要+号了 continue; } else if(s[i] == '(' || dev.empty()){//是左括号或者空栈直接入 dev.push(s[i]); }else if(s[i] == ')'){//是右括号的话就开始栈直到为左括号 while(dev.top() != '('){ out[t++] = dev.top(); out[t++] = ' '; dev.pop(); } dev.pop(); }else{ if(PriOrity(s[i],dev.top()) == 1 ){//如果优先级大,直接入栈 dev.push(s[i]); }else{ while( dev.size() && dev.top() != '('){//如果优先级小,因为每一次的入栈都会弹出大的,直接弹道为括号为止 out[t++] = dev.top(); out[t++] = ' '; dev.pop(); } dev.push(s[i]); } } } if(dev.empty()){//考虑(+2)的情况 for(int i = 0 ;i < t-1 ;i++){ cout<<out[i]; } cout<<endl; } else{//最后一个去空格加换行符就好了 while(dev.size() ){ out[t++] = dev.top(); out[t++] = ' '; dev.pop(); } for(int i = 0 ;i < t-1 ;i++){ cout<<out[i]; } cout<<endl; } return 0;}
0 0
- 表达式转换【PAT】
- PAT 表达式转换
- pat 表达式转换
- PAT表达式转换
- pat Data_stucture 表达式转换-栈的应用
- PAT DS 3-06 表达式转换
- 浙大PAT 3-06. 表达式转换 (解题思路)
- 进制转换[PAT]
- 表达式转换
- 表达式转换
- pat:1022<进制转换>
- 后缀表达式转换表达式树
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 怎么在leangoo里绑定账号,更改邮箱?
- 数据库的一些论文的个人整理
- [LeetCode] 4. Median of Two Sorted Arrays
- javacard软件架构
- 面向对象
- PAT 表达式转换
- 21款最佳Linux命令行终端工具
- POJ 3468 线段树 区间增减 区间求和
- java导入https证书
- OC __attribute__
- 什么是PMU(PMIC)
- 设计模式之模板方法模式
- android中LayoutInflater.from(context).inflate的分析
- ListView的优化