5-20 表达式转换
来源:互联网 发布:区块链闪电网络 知乎 编辑:程序博客网 时间:2024/04/27 13:30
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
输入格式:
输入在一行中给出不含空格的中缀表达式,可包含+
、-
、*
、\
以及左右括号()
,表达式不超过20个字符。
输出格式:
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
输入样例:
2+3*(7-4)+8/4
输出样例:
2 3 7 4 - * + 8 4 / +
思路点:关键在于 '('直接进栈,‘)’直接出栈(结果不含括号),只有优先级大于栈顶才入栈,其他情况出栈(注意同符号也要出栈,符号优先级相同按从左到右出栈)。
数据结构:容器头尾作为两个栈。
问题:PTA官网无法编译通过,但VS,VC6都能成功,不知原因。
#include<iostream>#include<vector>#include<string>#define lyft vector<string>&using namespace std;int testcomlyf(char or, char right);void insert(lyft ve,char a, int &l, int &r, int &pr){if (0 <= a - '0'&&a - '0' <= 9)//数字{if (l == 0){ve[l++] = a;pr = 1;}else{if (pr){ve[l - 1] = ve[l - 1].append(1, a);}else{//判断优先级ve[l++] = a;pr = 1;}}}else//符号{pr = 0;if (r ==( ve.size() - 1)){ve[r--] = a;}else{//判断优先级//判断优先级switch (0){case 0:r++; break;case 1:ve[r--] = a; break;case -1:{ ve[l++] = ve[++r]; insert(ve, a, l, r, pr);}}}}}int testcomlyf(char or, char right){char test = or;switch (test){case '(':if (right == ')')return 0;//表示清除else{return 1;//大于}case'+':if (right == '*' || right == '/' || right == '(')return 1;else return -1;case'-':if (right == '*' || right == '/' || right == '(')return 1;else return -1;case'*':if (right == '(')return 1;else return -1;case'/':if (right == '(')return 1;else return -1;default:return 0;}return 0;}int main(){string p = "";int N, M, left = 0, right = 0, preisnum = 0;cin >> p;vector<string> ve(40);right = ve.size() - 1;for (int i = 0; i < p.size(); i++){insert(ve, p[i], left, right, preisnum);}if (right != ve.size() - 1){while (right != ve.size() - 1){ve[left++] = ve[++right];}}for (int j = 0; j < left; j++)cout << " " << ve[j];system("pause");return 0;}
0 0
- 5-20 表达式转换
- 5-20 表达式转换 (25分)
- 5-20 表达式转换 (25分)
- 5-20 表达式转换 (25分)
- 表达式转换
- 表达式转换
- 5-1 表达式转换 (25分)
- 5-2 表达式转换 (25分)
- 后缀表达式转换表达式树
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式转换后缀表达式
- 中缀表达式 前缀表达式 后缀表达式 转换
- 转换为表达式
- 字符串转换为表达式
- C#学习之----正则表达式
- 第一个servlet
- 动态规划练习一—13最大上升子序列
- hdu 2610 全排列
- Java线程优先级
- 5-20 表达式转换
- 设计模式之工厂模式
- 基于BP人工神经网络的数字字符识别及MATLAB实现
- Java内存管理
- Jenkins自动化上传到服务器上的配置
- STM32F205RET6工程应用要点
- 用php把word文件转换成pdf文件
- Java关键字final、static使用总结
- Android逆向基础知识之NDK开发篇