摘要:检测后缀表达式的合法性 前面我们介绍了《后缀表达式的计算》,具体做法在于设置一个数据结构:操作数栈,基于操作数栈根据操作符进行弹栈、运算、压栈等操作,最终计算而得后缀表达式的结果。 我们默认处理的后缀表达式都是合法的,对于非法的后缀表达式,我们并没有给出适当的处理。这里我们将在后缀表达式的计算过程中,同时检测后缀表达式是否合法,如果合法则计算到底,最终得到后缀表达式的值;如果非法,则返回该后缀表达式为非法。 比如有后缀表达式: 2 + 3 * 该后缀表达式是非法的,因为+操作符只有一个操作数2; 又如: 1 3 5 * + 7 / - 该后缀表达式的/操作符只有一个操作数7,所以也是非法的;
阅读全文
摘要:对表达式进行空白符预处理 前面我们关于中缀表达式、后缀表达式的输入默认是按照操作符和操作数之间是有空白符区分的,所谓的空白符即为空格或者制表符,不包括换行符。// 表达式中操作符和操作数之间默认有空白符void get_infix(vector& inf){ inf.clear(); string line; getline(cin, line); istringstream sin(line); string tmp; while (sin >> tmp) { inf.push_back(tmp); }} 我们这里针对输入表...
阅读全文
摘要:字符串替换 C++ string 中有自带的replace替换函数,其替换方式有以下几种: (http://www.cplusplus.com/reference/string/string/replace) 这几种方式都是只能针对某一个目标进行替换,不能对字符串中出现多次目标的情形进行全部替换。下面我们给出对字符串中所有目标进行替换的程序。一、两种基本的全部替换方式 比如给定一目标字符串(以下参考自Vimer):12212 我们将其中的“12”替换为“21”,有两种替换方式,分别为: 1)进行distinct替换,即每次替换后,对替换...
阅读全文
摘要:中缀表达式的计算 前面我们分别讨论了《中缀表达式转换为后缀表达式》以及《后缀表达式的计算》,将二者合并一起即为中缀表达式的计算。即中缀表达式的计算包含两个过程: 1)中缀表达式到后缀表达式的转换 2)后缀表达式的计算 其中,第一个过程是用到了一个栈,该栈存储操作符,即为操作符栈。顺序扫描整个中缀表达式,如果是操作数直接存入后缀表达式中,如果是操作符,则根据其优先级进行入栈出栈操作,具体细节可参见《中缀表达式转换为后缀表达式》。 第二个过程也用到了一个栈,该栈存储操作数,即为操作数栈。其过程是从左到右顺序扫描整个后缀表达式,如果是操作数,则直接入栈,如果是操作符,则对栈中操作数进行弹栈操作,并对
阅读全文
摘要:后缀表达式的计算 对后缀表达式进行计算,得到表达式的值。 例如有后缀表达式:2 1 + 3 * 其结果应为: 9 后缀表达式: 1 3 5 * + 7 9 / - 其结果应为:15.222 后缀表达式: 1 3 + 5 7 - * 9 / 其结果应为: -0.889 后缀表达式计算程序如下:// 后缀表达式的计算#include #include #include #include #include #include using namespace std;void get_postfix(vector& postf){ postf.clear(); string line; ...
阅读全文
摘要:中缀表达式转换为后缀表达式 首先何为中缀表达式。中缀表达式就是我们最为常见的算术表达式形式,即操作符在操作数中间。比如 3 + 4。 后缀表达式是将操作符置于操作数后面,即如下形式:3 4 +。 给定一个中缀表达式,我们如何将其转换为后缀表达式? 我们这里涉及的操作符只局限于加、减、乘、除四种运算,即四则运算,外加括号功能。 比如给定一个中缀表达式:1 + 3 * 5 – ( 7 / 9 ) 其后缀表达式应为:1 3 5 * + 7 9 / - 中缀表达式: ( 1 + 3 ) * ( 5 – 7 ) / 9 其后缀表达式为: 1 3 + 5 7 - * 9 / 我们先给出其程序实现如下://
阅读全文
摘要:输出有序序列中元素的排名 给定一个有序序列,假设为:1, 2, 2, 8, 9, 9, 10 我们想得到各个元素在序列中的排名,比如1的排名为1,第一个2和第二个2的排名都为2,即我们想得到这样一个序列:1, 2, 2, 4, 5, 5, 7 我们首先讨论根据一个有序序列,如何得到其各个元素的排名;然后,讨论针对某个元素,如何快速得得到其排名。 一、得到整个序列各个元素的排名 程序如下:#include #include using namespace std;// 检测是否有序bool is_ordered(const vector& arr){ for (vector::size_
阅读全文