C :提取分析数学表达式的符号/变量
C++: Extracting symbols/variables of an analytical mathematical expression
i具有用户可以提供的表达式,例如:
a*sin(w*t)
a+b/c
x^2+y^2/2
我想在那里获取变量列表。我不需要做任何替代。因此,对于第一个公式,它将是{a,w,t}
。对于第二个{a,b,c}
,以及最后一个{x,y}
。
该表达式主要是用Synpy解析的,但是我需要能够在C 中获取变量列表以进行某些检查。我想:
- 避免将整个Python解释器链接到我的程序
- 避免重新发明轮子,因为我看到有许多可用的解析库,例如
muparser
,但我不知道这些功能是否提供此功能
最简单的方法是什么?您将如何解决此问题?
给定输入: const string input
我们可以用正则 set<string>
收集或变量:
b([a-zA-Z]w*)(?:[^(a-zA-Z0-9_]|$)
您可以在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() };
实时示例
编辑:
regex
说明:
-
b
断言W
字符或字符串的开始或结尾 -
([a-zA-Z]
捕获以字母charachter开头的任何东西 -
w*)
,然后是任意数量的"单词"字符 -
(?:
指定我的非捕捉可选匹配的开始 -
[[^(a-zA-Z0-9_]
1 st 选项是非打开 - 段的W
字符 -
|$)
另一个选择是已达到输入的末尾
相关文章:
- 在带有brew的MacOS上链接时缺少增强ICU正则表达式符号
- C++无符号字符串类型的正则表达式
- 符号和未签名整数表达式之间的比较,以进行循环误差
- C++编译错误(有符号和无符号整数表达式之间的比较)
- std::正则表达式转义"+"符号
- C++ 有符号和无符号整数表达式之间的比较
- 缩小从"int"(常量表达式)到"无符号int"的转换 - MSVC vs gc
- C++ 斯特劳斯特鲁普的"std_lib_facilities.h"字符串结构 – 警告:无符号表达式的比较
- 在算术表达式中,双精度会隐式转换为无符号 int 吗?
- 有符号和无符号整数表达式之间的比较
- 代数树表达式C++错误:未解析的外部符号"Public:_thiscall AlgebraicTreeExpression::~AlgebraicTreeExpression(void) ..."
- 消除有符号和无符号整数表达式之间比较的优雅方式
- C :提取分析数学表达式的符号/变量
- 为什么C++在表达式中将有符号的 int 转换为无符号的 int
- 警告:有符号和无符号整数表达式之间的比较
- 在C++中使用表达式模板进行符号区分
- 正则表达式字母数字和符号 [-*/]
- 将符号替换为表达式中的值并打印表达式输出
- 为什么返回类型中的decltype表达式必须在符号名称中损坏
- 表达式:(无符号)(c+1) <= 256?