C++ 在函数中使用文件中的字符串
我在c中有这个函数++C++ 在函数中使用文件中的字符串,c++,casting,C++,Casting,我在c中有这个函数++ double f_x(double y , string sfy ) { return sfy; } 我想从文件中读取字符串sfy并将其传递给f_x函数 sfy包含类似于y、cos(y)或exp(y)的内容 当我将y和sfy传递给f_x时,我希望f_x计算sfy并返回它 我可以做数字1和3,但问题是f_x的类型是double,sfy是string,所以我得到了错误 我不能将f_x的类型更改为任何其他类型,它应该是双精度或浮点型 我怎样才能克服这个问题,也就是说,我应
double f_x(double y , string sfy )
{
return sfy;
}
我怎样才能克服这个问题,也就是说,我应该怎么做才能使f_x返回sfy作为double。类似这样的东西,也许:
#include <map>
#include <string>
#include <fstream>
#include <iostream>
#include <cmath>
std::map<std::string, double(*)(double)> m;
double f_x(double y , std::string sfy )
{
if (m.find(sfy) == m.end()) throw "Invalid operation.";
return m[sfy](y);
}
int main()
{
m["exp"] = std::exp;
m["cos"] = std::cos;
m["sin"] = std::sin;
std::ifstream file("test.txt");
std::string op;
std::getline(file, op);
std::cout << f_x(42.0, op);
}
#包括
#包括
#包括
#包括
#包括
std::map m;
双f_x(双y,标准::字符串sfy)
{
若(m.find(sfy)=m.end())抛出“无效操作”;
返回m[sfy](y);
}
int main()
{
m[“exp”]=std::exp;
m[“cos”]=std::cos;
m[“sin”]=std::sin;
std::ifstream文件(“test.txt”);
std::字符串op;
std::getline(文件,op);
你的意思是你会有一个像f_x(3.14,“cos(y)”这样的电话吗你真的想让它返回y的余弦吗?是的,我想。我将用这个函数来解一个积分微分方程。这个函数是我实函数的一个最小例子。如果事实sfy包含一个非常大的表达式,在几个变量的TEMR中。谢谢。这段代码有一些问题。1-在实际情况下sfy(字符串)包含一个包含多个变量的非常大的表达式,但我认为您的代码适用于只有一个变量和一个表达式的情况。2-因为sfy中有多个变量,所以有必要将cos或sin或exp及其参数放入test.txt中。下面是我在sfy-1.E^(s-t+t1-t2)中的一个小表达式Cos[1.88346 t-1.88346 t2]Cos[1.88346 t1-1.88346 t2]Sin[1.88346 s-1.88346 t]Sin[1.88346 s-1.88346 t1]正如您看到的,有4个变量s、t1、t2和tIn,在这种情况下,您需要某种类型的解析器。也许您应该寻找一些现有的工具(flex、lex等)。您可以从wikipedia条目开始“解析”.是学习输入处理的一个很好的资源。它通过制作计算器来教授它。