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的类型更改为任何其他类型,它应该是双精度或浮点型 我怎样才能克服这个问题,也就是说,我应

我在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的类型更改为任何其他类型,它应该是双精度或浮点型


    我怎样才能克服这个问题,也就是说,我应该怎么做才能使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条目开始“解析”.是学习输入处理的一个很好的资源。它通过制作计算器来教授它。