在C++,Linux中有没有一种简单的方法将字符串“5 < 6”转换为true?

3
我正在编写一个算法,用于计算约束系统的解数。在这种情况下,约束是谓词,例如"a < b"或"a = 3+b or a = 6+b",我将其作为输入字符串接收。我需要能够询问变量的任何给定值选择是否是有效的组合,而且我不想构建解析器来完成它。
是否有一个快速的C++库可以将字符串作为数学表达式进行评估?我认为我有一种简单的方法将"a < b"转换为"5 < 6",我只需要一种评估的方法。

1
现在你需要解析一个字符串,但是你不想使用解析器? - Gene Bushuyev
8
对于投票关闭此问题的人——为什么这不是一个真正的问题? O_o - Vilx-
哦,我不介意使用现有的,我只是不想花一周或更长时间学习如何使用Lex和Yacc。 - Thomas Levy
1
你的问题有些不清楚。你只需要评估数学表达式还是需要解方程组?a = 6 + b 中的 = 是指赋值还是表示等式? - James McNellis
@Thomas:这将极大地改变问题。与解决方程组相比,表达式评估是非常容易的。它们都是线性方程吗?你需要解决的变量数量有上限吗?我建议修改你的问题,清楚地说明你不仅需要评估表达式,还需要解决方程组。 - James McNellis
显示剩余3条评论
7个回答

4

写一个简单的算术表达式解析器是在学校的一次练习。它并不是很复杂,你可以试试!

这个想法是将其转换为逆波兰表示法,然后评估它变得非常容易。上面的维基百科文章包含了您需要的所有详细信息。

还有工具"Flex"和"Bison",虽然我自己没有使用过。


2
如果你要经历将表达式转换为逆波兰表达式的痛苦,那么你不妨直接计算它,跳过逆波兰表达式转换步骤。 - Billy ONeal
编写一个简单的有限程序是非常容易的,而构建一个真正复杂的程序实际上相当复杂。 - Martin York
@Martin York - 你是想说我们在学校学的逆波兰表达式(RPN)方法是不完整的吗?我认为只需要加入一些变量等内容,它就可以解析任何[有效]的表达式。 - Vilx-

1

在C或C++中没有简单的方法来实现这个。

你需要构建自己的解析器。


0

我不知道是否有一个库可以为您完成这项工作,但是考虑到它看起来至少表面上很简单,我会自己去做。

验证它将非常容易,并且使用正则表达式是理想的 -- 您只需省略空格即可。


0

你可以下载一个相对较小的解释型语言,比如Lua,并使用它们现有的代码。对于像这样的简单操作,使用起来非常容易。


0

这里有一个杀苍蝇用坦克的方法.. :)

boost::spirit.

对于你想要做的事情,定义解析器非常简单,而且它们有一些示例是你所需要的。可能会让你省去在 bison、lex 和 yacc 上挖掘的时间。


0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接