从外部输入文件将字符串数学公式以double形式读入cpp
Read string math-formula into cpp as double from external input-file
我对c++编程比较陌生,并尝试编写一个程序来数值求解微分方程。我使用codeBlocks作为编译器,并在windows下工作。数值解算器已经很好用了。我的程序包含了一些很长的公式,这些公式是由mathematica创建并转换成php语言的。然后将公式存储在.txt文件中。我已经可以将公式作为字符串读取,但不能用它来计算,因为程序必须将公式解释为双类型数学,而不是字符串。这里的问题是,我的公式不仅包含数字,还包含作为变量的字母(它们的值是在程序中设置的)和其他数学符号。这就是为什么我认为我不能只使用"atof"(http://www.cplusplus.com/reference/cstdlib/atof/?kw=atof)或其他转换函数。(如果我在这一点上错了,我很乐意学习如何使用这个函数来解决这个问题!)
下面是我的小程序中的一些示例代码:
//Program to solve ODEs
#include <iostream>
#include <math.h>
#include <cmath>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <time.h> //to measure the time
#include <stdio.h>
#include <conio.h>
using namespace std;
int main(void)
{
double k1=0;
ifstream file("Formelvu1.txt");//file with the fromula
string line;
stringstream longform;
while(getline(file, line)){ //read the formula and store them
longform << line; //store the string in "longform"
cout << longform;
}
return 0;
for(double t=0; t<10; t++){
k1 = (longform) * t; //simple operation with the formula
}
return 0;
}
这段代码不工作,因为长格式不是双…长格式是类似于:ab+pow(t,3)-sin(tb)/x的字符串。
我已经找到了几个与这个话题相关的问题,但没有一个问题对我来说足够容易理解,或者我想做的正确的事情:
如何在c++中转换字符串到双精度?
根据我的理解,这家伙正在尝试最接近我想要做的事情:
使用ScriptEngine从字符串中计算数学公式
但是我不完全理解代码。如果它对我的问题有用:这部分是做什么的?
try{
return (Double)engine.eval(tmp);
}
catch(Exception fexp)
{
}
我也听说过解析器,它可以解释表达式行muparser:http://muparser.beltoforion.de/mup_eval.html但我不知道这是否比我需要的更多……
在这个问题上,我感谢每一个回答/回应和帮助。谢谢你!你必须仔细研究基本C/c++语言和标准库中包含的内容和不包含的内容。
但是,如果您从mathematica中得到一个c++兼容的表达式,那么您可以让c++编译器像
那样工作double myfunc(double a, double b, double c, double t, double x) {
return
#include "Formelvu1.txt"
;
}
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- Cpp-Tuple使用带有变量的get
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何通过cpp程序运行shell脚本
- 使用2个键的cpp-stl::优先级队列排序不正确
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如何在cpp文件之间切换窗口?在Qt中
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我需要知道编译器如何在cpp中使用析构函数
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- test1.cpp:9:77:错误:对"(const std::normal_distribution) <double>(std::mt19937&)"的调用不匹配
- main.cpp|45|error:"int" 和 "double" 之前的预期主表达式
- 从外部输入文件将字符串数学公式以double形式读入cpp