将字符串另存为浮点数组C++
Save string as array of floats C++
我从终端收到以下字符串:
"4 4 0.2 0.3 0.0 0.1 0.4 0.1 0.2 0.0 0.4 0.2 0.3 0.0 0.5">
我的目标是将此字符串保存为一个浮动数组,如arr=[4,4,0.2,…]。我事先不知道数组的大小,所以这取决于用户写的内容。这些值总是用空格分隔。
我尝试过使用std::stof(如https://www.geeksforgeeks.org/stdstof-in-cpp/),字符串流(如中所述https://www.geeksforgeeks.org/converting-strings-numbers-cc/)但它们都不起作用。
试验:
cout << "Introduce the transition matrix n";
getline (cin, trans_matrix);
std::vector<float> arr(trans_matrix.size(), 0);
int j = 0, i;
// Traverse the string
for (i = 0; trans_matrix[i] != ' '; i++) {
// if str[i] is ' ' then split
if (trans_matrix[i] == ' ') {
j++;
}
else {
arr[j] = std::stof(trans_matrix[i]) // string to float
}
}
但编译器说:
调用"stof"没有匹配函数
您的代码非常混乱。代码的一半将字符串视为字符序列(这是正确的),但另一半将其视为浮点序列,这不是真的。例如
std::vector<float> arr(trans_matrix.size(), 0);
这将创建一个与字符串大小相同的向量。但是字符串大小是指与字符串中浮点数不同的字符数。还有
arr[j] = std::stof(trans_matrix[i]);
trans_matrix[i]
是一个字符,它不是字符串,所以不能在它上使用将字符串转换为浮点值的函数。
我试图明确一点,你不能通过编写大致正确的代码来编程。你必须仔细思考你正在做什么,并编写完全正确的代码。你必须对这些概念完全清楚和精确。
如果你在读std::cout
,你会怎么做?如果你从一个字符串中读取,除了使用std::istringstream
而不是std::cout
之外,这是完全相同的方法。这里有一个简单的方法。
#include <sstream>
std::vector<float> arr;
std::istringstream input(trans_matrix);
float f;
while (input >> f)
arr.pusk_back(f);
简单地说,创建一个字符串流,一次读取一个浮点值,将它们添加到向量中。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '