我有一个string
string expression=((true AND true)OR false);
如何将其转换string
为条件语句,以便我可以在if
语句中使用它,即
if((true AND true)OR false))
就像eval
在 JavaScript 中一样 - C++ 或 C 中是否有任何 API?
您可以使用第三方脚本库,例如 LUA ( http://www.lua.org/ ) 来执行此操作,或者您可以编写自己的表达式解析器(这很重要)。
从根本上说,C/C++ 代码必须在运行之前进行编译,这限制了您像在其他一些语言中那样动态地运行代码。
您可以轻松获得的最接近的行为是将字符串解析为某种内部表示,并让您的代码响应该表示。例如使用增强精神:
例如,这个答案可以满足您的要求,并且具有增强的精神。但正如您所看到的,需要付出很多努力:
#include <stdio.h>
#include <stdlib.h>
int eval(const char *boolean_expression){
FILE *fp = fopen("temp.c", "w");
int ret;
fprintf(fp,
"#include <stdbool.h>\n"
"#include <iso646.h>\n"
"int main(void){\n"
"return (int)%s;}", boolean_expression);
fflush(fp);
fclose(fp);
system("gcc temp.c -o temp");
remove("temp.c");
ret=system("temp.exe");
remove("temp.exe");
return ret;
}
int main(void){
const char *expression="((true and true) or false)";
int condition = eval(expression);
if(condition)
printf("YES\n");
else
printf("NO!\n");
return 0;
}
C 和 C++ 没有eval
类型功能——那是因为语言是经过编译的,如果你想能够“编译更多代码”,就需要整个编译器成为运行时的一部分——别管它的困难引用例如现有变量。
对于这种类型的表达式,编写一些解析和评估表达式的代码并不难——它需要一个堆栈来处理括号和一些简单的运算符,但这并不难。
显然,集成现有的脚本语言也可以。