将输入文件中的子字符串转换为双精度值
Converting substrings from an input file to a double value?
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()
。您可以在这里看到一个完整的示例。
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何从字符串转换为双精度*
- C++如何将字符串逐行转换为双精度
- 如何防止双精度值到整数的隐式转换
- 如果存在从"双精度"到"T"的转换,则禁用构造函数
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将双精度值转换为 char 变量时字符串流如何工作
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在 c++ 中从双精度转换为字符串
- 如何在C++中将无符号字符缓冲区转换为双精度?
- 从字符串转换为双精度和整数 - C++
- 如何使用按位运算将随机uint64_t转换为范围 (0, 1) 的随机双精度
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- 表达式中应用的转换(双精度为整数)
- 无法转换双精度 - 新运算符
- C++类型转换双精度