我从终端收到以下字符串:
“ 4 4 0.2 0.5 0.3 0.0 0.1 0.4 0.4 0.1 0.2 0.0 0.4 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] != '\0'; i++) {
// if str[i] is ' ' then split
if (trans_matrix[i] == ' ') {
j++;
}
else {
arr[j] = std::stof(trans_matrix[i]) // string to float
}
}
但是编译器说:
没有匹配功能可调用'stof'
答案 0 :(得分:1)
您的代码非常混乱。您的代码一半将字符串视为字符序列(正确),而另一半则将其视为浮点序列,但这并不是真的。例如
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);
简单,创建一个字符串流,一次读取一个浮点数,然后将它们添加到向量中。