解析数学表达式的库-exprtk
github传送门:https://github.com/ArashPartow/exprtk
网站上有很多介绍,这里先使用最简单的方法。
将exprtk.hpp加入到项目中就可以了,然后包含这个头文件。
常规表达式:
#include <iostream> #include "exprtk.hpp" using namespace std; double eval(string s) { exprtk::expression<double> expr; exprtk::parser<double> p; p.compile(s,expr); return expr.value(); } int main(int argc,char** argv) { if(argc!=2) { cout<<"Usage:"<<argv[0]<<" \"expression\""<<endl; return -1; } cout<<argv[1]<<"="<<eval(argv[1])<<endl; return 0; }
编译运行测试:
对比了一下第二个计算的结果:
使用这个库,写一个图形科学计算器,岂不是分分钟的事情?可能最主要的工作被沦落为拖控件和界面设计了……
不过也有坑爹的地方,那就是由于使用了hpp文件的方式,这么一个简单的程序,编译以后文件大小居然是10.1M,
当然这只是这个应用的冰山一角,实际上,还有更高级更强大的功能,例如支持带变量的表达式等,感兴趣的话可以摸索试试。