- 主题:碰到一个难题了字符串转表达式
程序里面有lambda表达式,这个表达式诸如y=3+x, 其中这个3+x部分想让用户输入,用户也可以输入3*x等,然后把用户输入的字符串转为表达式,以便后续计算,之前c#有第三方库,python之类的也有eval函数(这个可能还不太一样,我不需要立即求值),c++没有找到类似的功能或者库。
各位有什么思路
--
修改:anything1999 FROM 124.64.16.*
FROM 124.64.16.*
实际上不是求值的事情,而是把字符串变成表达式(lambda或者std::function),不是立即求值,而是运行时输入x进去再求表达式的值。比如3+x,运行时给出x=10,也可能给出100, 99都行。
不知道我讲明白没有。
【 在 KillnCov 的大作中提到: 】
: 表达式求值不都是用经典的逆波兰式么?操作符和操作数分解的清清楚楚。几十行代码的事。
:
--
FROM 124.64.16.*
实际上不是求值的事情,而是把字符串变成表达式(lambda或者std::function),不是立即求值,而是运行时输入x进去再求表达式的值。比如3+x,运行时给出x=10,也可能给出100, 99都行。
不知道我讲明白没有。
【 在 allegro 的大作中提到: 】
: 你有木有刷过leetcode,这种表达式求值都有固定模板的。
--
FROM 124.64.16.*
这个有点意思,我用一用。
【 在 meizhi 的大作中提到: 】
: exprtk很香
: 发自「今日水木 on 22041216C」
--
FROM 124.64.16.*
实际上不是求值的事情,而是把字符串变成表达式(lambda或者std::function),不是立即求值,而是运行时输入x进去再求表达式的值。比如3+x,运行时给出x=10,也可能给出100, 99都行。
不知道我讲明白没有。
【 在 e729 的大作中提到: 】
: 把这个表达式写到一个.c文件中,fork新的进城编译执行它,取得结果。
: 以上是十数年前,本老某个学期面对的最后一道C大作业题受挫时,给自己预备的的最后一招
:
--
FROM 124.64.16.*
嵌python是一个办法,但又两个问题:
1. 参数值是由c++程序提供,而且调用非常频繁,是否影响效率
2. 是不是要安装python运行时?
【 在 RunningOn 的大作中提到: 】
: 你如果就是要解析这个表达式,只用C++,其实还是要学很多东西的,花的时间比较久。
:
: 你要想学有兴趣有时间,那OK,版友们已经有比较多的方案了。
: ...................
--
FROM 114.249.195.*
我也是这么想的,不知道这个fork编译执行的效率如何。
目前三种值得一试:
1. 内嵌python,后续需要频繁在c++和python之间传递参数,效率?
2. 自己写表达式分析程序
3. 你这种方法,每次编译成一个动态库,动态加载执行,效率?
【 在 e729 的大作中提到: 】
: 把这个表达式写到一个.c文件中,fork新的进城编译执行它,取得结果。
: 以上是十数年前,本老某个学期面对的最后一道C大作业题受挫时,给自己预备的的最后一招
:
--
FROM 114.249.195.*
你这个方法的问题是:需不需要安装python?
【 在 vwx 的大作中提到: 】
: 内嵌python
--
FROM 114.249.195.*
你这个方法比较硬核:)
【 在 yytree 的大作中提到: 】
: 看看C实现的basic源码
: 解释执行
: 看看怎么计算表达式的
: ...................
--
FROM 114.249.195.*
看了一下介绍,正是我想要的!!
【 在 meizhi 的大作中提到: 】
: exprtk很香
: 发自「今日水木 on 22041216C」
--
FROM 114.249.195.*