将输入文件中的子字符串转换为双精度值

Converting substrings from an input file to a double value?

本文关键字:转换 双精度 字符串 输入 文件      更新时间:2023-10-16
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库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);
}

也可以使用stringstream类。你可以这样使用它:

std::string strx = droneInfo.substr(31, 3);
double x;
std::stringstream ss;
ss << strx;
ss >> x;

请记住为此解决方案添加#include <sstream>,如果要重用stringstream对象,请添加.clear()。您可以在这里看到一个完整的示例。