void getBaseCoord(string droneInfo, double& x, double& y, double& z){
   // x= stod(droneInfo.substr(31, 3));
    //y= stod(droneInfo.substr(34, 3));
   // z= stod(droneInfo.substr(37, 3));
    string strx, stry, strz;
    strx = droneInfo.substr(31, 3);
    stry = droneInfo.substr(34, 3);
    strz = droneInfo.substr(37,3);
    x = stof(strx);
    y = stof(stry);
    z = stof(strz);


上面是我正在为新手C ++课程进行的项目的摘录。我正在从输入文件中读取此字符串:

9673767892DroaninAlong4880021DO4.37.33.88.19.33.8U


注释掉的部分是出于功能操作的目的,试图将字符串行中的子字符串转换为双精度值。但是,我无法以这种方式转换它们,并且在编译时出现错误,说未声明stod(我想它认为它是变量?)

在函数中将子字符串转换为双精度值的正确方法是什么?

最佳答案

不确定stod()是什么,但是强烈暗示C library strtod()会执行该操作。

请注意,该函数采用两个参数,尽管第二个参数可能为NULL。第一个参数是C样式的字符串,因此可能需要转换:

void getBaseCoord(string droneInfo, double& x, double& y, double& z)
{
    x = strtod(droneInfo.substr(31, 3).cstr(), NULL);
    y = strtod(droneInfo.substr(34, 3).cstr(), NULL);
    z = strtod(droneInfo.substr(37, 3).cstr(), NULL);
}

10-06 14:58