我有string
string expression=((true AND true)OR false);
如何将此string
转换为条件语句,以便我可以在if
语句中使用它,即
if((true AND true)OR false))
与JavaScript中的eval
一样 - C ++或C中是否有任何API?
答案 0 :(得分:5)
您可以使用第三方脚本库(如LUA(http://www.lua.org/)来执行此操作,或者您可以编写自己的表达式解析器(这非常重要)。
答案 1 :(得分:3)
从根本上说,C / C ++代码必须在运行之前进行编译,这限制了您以其他语言的方式动态运行代码。
您可以轻松获得的最接近的行为是将字符串解析为一些内部表示,并让您的代码响应该表示。例如使用提升精神:
e.g。这个答案可以满足你的要求,并且具有提升精神。但正如您所看到的,需要付出相当多的努力:
答案 2 :(得分:3)
#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;
}
答案 3 :(得分:0)
C和C ++没有eval
类型的功能 - 这是因为语言是编译的,如果你想要“编译更多”,它需要整个编译器成为运行时的一部分代码“ - 不要介意引用例如现有变量的困难。
对于这种类型的表达式,编写一些解析和计算表达式的代码并不是非常困难 - 它需要一个堆栈来处理括号和一些简单的运算符,但这并不是很难做到。
显然,集成现有的脚本语言也会有效。