1. 难点:如何判断字符是否为运算符。 解决方法:定义一个函数IsOperator(char c),遍历运算符集合,判断字符是否与其中任意一个运算符相等。

  2. 难点:如何比较两个运算符的优先级。 解决方法:定义一个二维数组Prior[7][7],表示运算符间的优先关系。通过ReturnOpOrd函数将运算符转换为在运算符数组中的序号,然后根据序号在Prior数组中查找对应的优先级。

  3. 难点:如何进行符号运算。 解决方法:定义一个函数Operate(double a, unsigned char c, double b),根据运算符c进行相应的计算,并返回计算结果。

  4. 难点:如何实现算符优先算法。 解决方法:使用一个顺序栈来存储运算符,初始时将'#'入栈。遍历输入的中缀表达式,如果是操作数,则输出;如果是运算符,则与栈顶运算符比较优先级,根据优先级进行相应的操作。

  5. 难点:如何将输入的中缀表达式转换为后缀表达式。 解决方法:在算符优先算法中,当遇到运算符时,根据优先级进行相应的操作。如果栈顶运算符优先级低,则将当前运算符入栈;如果栈顶运算符优先级高,则退栈并输出,直到栈顶运算符优先级低于当前运算符。

  6. 难点:如何将字符串转换为浮点数。 解决方法:使用atof函数将字符串转换为浮点数,需要包含头文件

  7. 难点:如何正确处理输入的表达式。 解决方法:在输入表达式时,需要注意空格的处理。将输入的字符一个一个读取,如果是操作数则直接输出,如果是运算符则根据优先级进行相应的操作,直到遇到'#'字符结束。

  8. 难点:如何正确处理多位数的操作数。 解决方法:在读取操作数时,需要将多个字符组合成一个字符串,然后使用atof函数将字符串转换为浮点数。需要定义一个临时字符串tmp来存储字符,当遇到运算符时,将字符串转换为浮点数并输出,然后重新置空tmp。

  9. 难点:如何正确处理小数点的操作数。 解决方法:在读取操作数时,需要判断是否遇到小数点字符,如果遇到,则将小数点字符加入到临时字符串tmp中,然后继续读取下一个字符。

  10. 难点:如何正确处理负数的操作数。 解决方法:在读取操作数时,需要判断是否遇到负号字符。如果遇到负号字符,则将负号字符加入到临时字符串tmp中,然后继续读取下一个字符。当遇到下一个字符是运算符或结束字符时,将临时字符串转换为浮点数并输出,然后重新置空tmp

#include SeqStackcpp#include iostream#include stdlibh#include stringh#include cstdlib #define OperaterSetSize 7using namespace std;char OperaterSetOperaterSetSize = + - #;运算符间的优先关系unsigned char P

原文地址: http://www.cveoy.top/t/topic/iSJs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录