首页 关于muparserx 计算库的使用

关于muparserx 计算库的使用

小白鼠 2019-04-26 12:11:03 6 3554

许多应用程序需要解析数学表达式。比如在ug二次开发中,标准件库的开发,需要使用解析数学表达式,该库的主要目的是提供一种快速简便的方法。

muParser是一个用C ++编写的可扩展的高性能数学表达式解析器库。

它的工作原理是将数学表达式转换为字节码并预先计算表达式的常量部分。

20190426001313.png

网上大多数都是关于它的 C++ 外部库函数的介绍,几乎没有关于它类的成员函数的介绍......

这里就做个记录,最近的项目里也用到了它。

包含头文件

#include "parser/mpParser.h"
#include "parser/mpDefines.h"
#include "parser/mpTest.h"

using namespace std;
using namespace mup;

以下是示例代码


	CString calcStr;
	GetDlgItem(IDC_EDIT3)->GetWindowText(calcStr);
	if (calcStr==_T(""))
	{
		GetDlgItem(IDC_EDIT4)->SetWindowText(_T("0.0"));
		return;
	}
	try{
		ParserX  parser; 
		int rowCount=m_list.GetItemCount();
		for (int i=0;i<rowCount;i++)
		{
			parser.DefineConst((string_type)m_list.GetItemText(i,0),  (float_type)(_ttof(m_list.GetItemText(i,1))));
		}
		//此方法少用
		//Value a((float_type)1.0);
		//parser.DefineVar(_T("a"),  Variable(&a));

		Value val;
		parser.SetExpr((string_type)calcStr);

		// implicitely create reverse polish notation
		val = parser.Eval(); 

		//double ruselt=(double)val.GetFloat();
		CString temp;
		temp.Format(_T("%f"),(double)val.GetFloat());
		GetDlgItem(IDC_EDIT4)->SetWindowText(temp);
	}
	catch(...){
		GetDlgItem(IDC_EDIT4)->SetWindowText(_T("计算错误!"));
	}


这个库的4.0.7版本是针对vs2013的,如果低版本需要使用本库,有几处需要修改:



此处内容已隐藏,评论后刷新即可查看!


发表评论

评论列表:

匿名
2021-12-27 10:16
看看,学习一下 0
匿名
2020-12-20 23:14
终于找到了
匿名
2020-06-23 11:53
看看,学习一下2125
2019-11-26 09:44
看看,学习一下21
匿名
2019-05-01 23:02
看看,学习一下
匿名
2019-05-01 22:56
这方面的库也有不少,