Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从c++;_C++_String - Fatal编程技术网

C++ 如何从c++;

C++ 如何从c++;,c++,string,C++,String,我想写一个程序,它接受像x^2+1这样的字符串并理解它 我想让用户输入她/他的功能,我想能够处理和理解它。有什么想法吗 char s[100]; s <- "x*I+2" x=5; I=2; res=calc(s); 将动态创建tmp.cpp 提前谢谢。幸运的是 查找{,include/}lib/MathExpression/Term。它处理复杂的数字,但您可以轻松地将其调整为普通的旧浮点数 许可证为GPL2 简而言之,当你有一个表达式 X*(X+2) 您的最高级别解析器可以解析

我想写一个程序,它接受像
x^2+1
这样的字符串并理解它

我想让用户输入她/他的功能,我想能够处理和理解它。有什么想法吗

char s[100];

s <- "x*I+2"

x=5;
I=2;
res=calc(s);
将动态创建
tmp.cpp

提前谢谢。

幸运的是

查找{,include/}lib/MathExpression/Term。它处理复杂的数字,但您可以轻松地将其调整为普通的旧浮点数

许可证为GPL2


简而言之,当你有一个表达式

X*(X+2)
您的最高级别解析器可以解析形式为A+B+C的表达式。。。在本例中,A是整个表达式

您可以递归解析优先级更高的运算符A*B*C。。。在这种情况下,A是X,B是(X+2)

继续递归,直到解析基本标记(如X)或命中一个左括号,在这种情况下,推送某种堆栈来跟踪您的位置,并使用顶级低优先级解析器递归到括号中

我建议您使用RAII并在出现解析错误时抛出异常。

使用

示例:它是德语的,但它是一个小而强大的解决方案 看

这正是你要寻找的。将函数read_varname更改为检测像“x”或“I”这样的变量。

我成功使用


从www上看,它似乎也支持std::complex,但我从未使用过它,我不知道你期待什么。这太复杂了,无法给出代码作为答案,但总体思路并不十分复杂。即使对于一个普通的业余程序员来说,代码也不是遥不可及的

您需要定义语法、标记字符串、识别运算符、常量和变量。
可能把表达式放在树上。编一个替换变量的方法。。。你可以评估

您需要某种解析器。使数学运算可解析的最简单方法是将它们写入。但是,你可以使用解析器库编写自己的解析器,比如从Boost或

编译动态C++文件是一个很好的解决方案…还有一个问题。@spraff-你能解释一下你的意思吗?如果你正在为一个插件系统编写一个IDE,并且想在运行中编译和测试模块,那么是的,就这样做。否则就是用大锤敲坚果。谢谢。我知道,但是我希望如果有一种方法让用户使用C++语法的完整语法:想想这个用户想要拥有的东西:<代码> SqRT(Sin(x))+TAN(t);代码>或一些更复杂的事情。什么是RAII?我的MathExpression::Term类正是这样做的。RAII是资源获取是初始化,它基本上意味着所有资源所有权都由构造函数和析构函数控制,这对于异常安全是必要的(出于其他原因也是一个好主意)。
X*(X+2)