MathExpression.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Expression类是解析表达式的类
  3. * 表达式支持 + - * / ^(pow) -(neg)运算符
  4. * 表达式支持 ( ) 控制优先级
  5. * 表达式中的实数只能为实数加小数点,不支持科学计数法表示(不会错误提示,但得不到正确表达式)
  6. * SetExprStr失败后会破坏原来的表达式
  7. * 支持26个字母(不区分大小写)表示变量
  8. * 使用SetVar设置变量值
  9. * 默认变量值为 1
  10. * GetResult时,若表达式求解不合法,返回非0
  11. * GetExprErrorStr 获取表达式错误代码的表示字符串
  12. * GetResultErrorStr 获取求解错误代码的表示字符串
  13. */
  14. namespace expInterpreter {
  15. enum AtomType{ATOM_ERROR = 0, ATOM_SYMBOL, ATOM_CONSTANT, ATOM_VARIABLE, ATOM_END};
  16. // 表示语法单位的结构体
  17. typedef struct
  18. {
  19. AtomType type;
  20. union
  21. {
  22. char symbol;
  23. double constant;
  24. char variable;
  25. } value;
  26. } Atom;
  27. // 从给定的字符串读入一个语法单位,从start开始,返回单位结束,为空时返回-1
  28. int read_atom(Atom *atom, const char *exprStr, int start);
  29. // 表达式
  30. class Expression
  31. {
  32. private:
  33. const static int poland_MAX;
  34. Atom *poland;
  35. int poland_N;
  36. double *var;
  37. public:
  38. Expression();
  39. ~Expression();
  40. const char *GetExprErrorStr(int err); // 根据错误码返回对应的错误提示
  41. const char *GetResultErrorStr(int err); // 根据错误码返回对应的错误提示
  42. int SetExprStr(const char *exprStr); // 设置表达式,在内部生成逆波兰式表达式,成功返回0,失败返回非零错误码
  43. void SetVar(char x, double value); // 设置变量x值为value
  44. int GetResult(double *result); // 根据设置的变量和上一次设置的表达式获取表达式的值放入result,成功返回0,错误返回非零
  45. const Atom *GetPoland();
  46. };
  47. }