将异常字符串解析为向量上的浮点运算?



我有一个代码,它获取一个.csv文件并读取值并将其打印出来。 .csv文件的内容是 -

55
100
200
500
500
150 

我正在使用stof方法将字符串转换为浮点数,如下所示 -

for (unsigned int i = 0; i < DataStore.size(); i++)
cout << stof(DataStore[i]) << endl;

但在这种情况下,我只得到输出为

55

而不是-

55
100
200
500
500
150 

我是C++新手,所以我很确定我错过了一些微不足道的东西 - 但无法弄清楚。

最少的可重现代码 -

string line;
vector<string> DataStore;
{
ifstream file("test.csv");
while (getline(file, line, ','))
{
DataStore.push_back(line);
getline(file, line);
}
}
for (unsigned int i = 0; i < DataStore.size(); i++)
cout << stof(DataStore[i]) << endl;

test.csv内容如下-

55
100
200
500
500
150 
while (getline(file, line, ','))

这会从文件中读取,直到遇到逗号。您的文件中没有逗号,因此整个文件将被读入line,此line插入DataStore并且循环不会进一步迭代,因为下getline没有什么可读取的。

因此DataStore.size()将是一个,在单次迭代中,整个文件的内容被传递给stof,这将从一开始就形成解析的数字,直到遇到不属于有效数字的内容,这里是换行符。结果将是55.这将被打印出来,循环退出。

您似乎想逐行阅读。这是通过没有第三个参数(或第三个参数等于'n'(的getline来完成的。此外,还有一个杂散getline,我不知道其目的。

string line;
vector<string> DataStore;
{
ifstream file("test.csv");
while (getline(file, line))
{
DataStore.push_back(line);
}
}
for (unsigned int i = 0; i < DataStore.size(); i++)
cout << stof(DataStore[i]) << endl;

请注意,您可以直接将文件中的数字读取到std::vector

ifstream file("test.csv");
vector DataStore(istream_iterator<double>(file), {});

这需要#include<iterator>,在 C++17 之前需要指定vector类型:vector<double>

它读取空格分隔的数字,直到文件末尾。

最新更新