C++:解析数学表达式的符号/变量

2024-03-29 00:02:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有用户可以提供的表达式,例如:

 a*sin(w*t) 
 a+b/c
 x^2+y^2/2

我想得到变量列表。我不需要做任何替换。第一个公式是{a,w,t}。对于第二个{a,b,c},对于最后一个{x,y}。你知道吗

表达式主要是用分析来分析的,但是我需要能够在C++中获得变量列表来进行一些检查。我想:

  • 避免将整个Python解释器链接到我的程序
  • 避免重新发明轮子,因为我看到有很多可用的解析库,比如muparser,但是我不知道这些库是否提供了这个功能

最简单的方法是什么?你将如何解决这个问题?你知道吗


Tags: 方法用户程序功能列表表达式链接sin
1条回答
网友
1楼 · 发布于 2024-03-29 00:02:37

给定一个输入:const string input我们可以用regex将变量收集到set<string>

^{}

可以在C++中使用如下:

const regex re{ "\\b([a-zA-Z]\\w*)(?:[^(a-zA-Z0-9_]|$)" };
const set<string> output{ sregex_token_iterator(cbegin(input), cend(input), re, 1), sregex_token_iterator() };

Live Example

编辑:

regex说明:

  • \b断言\W字符或字符串的开头或结尾
  • ([a-zA-Z]捕获任何以字母字符开头的内容
  • \w*)后跟任意数量的“word”字符
  • (?:指定非捕获可选匹配的开始
  • [[^(a-zA-Z0-9_]1st选项是一个非开括号\W字符
  • |$)另一个选项是已经到达输入的末尾

相关问题 更多 >