当我们输入一个数学表达式,是中缀表达式,我们首先转换为后缀表达式(逆波兰表达式),然后再进行求值。
在《大话数据结构》的104-100页有详细的介绍,下面是我理解之后的代码实现。
代码思路:
(1)首先对输入的中缀表达式合法性进行判断,bool isStringLegal(const char* str); 函数实现。
(2)然后把中缀表达式转换为后缀表达式。
(3)根据后缀表达式求出结果,double getTheResult(vector<string> &vec);函数实现。
注意:表达式的运算符可以输入 加、减、乘、除、括号,输入的数据为整形数据,计算结果为double型数据。
#include <iostream>
#include <math.h>
#include <map>
#include <vector>
#include <string.h>
#include <memory>
#include <string>
#include <stdio.h>
#include <stack>
#include <stdlib.h>
using namespace std;
#define MAX_STRING_LENGTH 100
/* 解析当前的整形数据,并把整形数据转换为string型 */
string analyData(const char* str, int &i);
/* 根据逆波兰表达式求表达式的值 */
double getTheResult(vector<string> &vec);
/* 判断该字符是否是 + - * / ( )