将异常字符串解析为向量上的浮点运算?
Resolving anomalous string to float operation on a vector?
我有一个代码可以获取 .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
。这被打印出来,循环退出。
您似乎想逐行阅读。这是由 getline
完成的,没有第三个参数(或第三个参数等于 '\n'
)。此外还有一个流浪者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>
它读取白色-space 分隔的数字,直到文件结束。
我有一个代码可以获取 .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
。这被打印出来,循环退出。
您似乎想逐行阅读。这是由 getline
完成的,没有第三个参数(或第三个参数等于 '\n'
)。此外还有一个流浪者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>
它读取白色-space 分隔的数字,直到文件结束。