gpt4 book ai didi

c++ - getline从txt文件中读取数据

转载 作者:行者123 更新时间:2023-11-27 23:46:06 27 4
gpt4 key购买 nike

我在使用 getline 命令从一个简单的 .txt 文件中提取数据时遇到了一些问题。

txt 文件非常简单:一列 400 个数字。我使用一个 vector 来存储它们,代码如下:

int i = 0;
string line;
vector <double> vec;

while (getline(input, line))
{
vec.push_back(i);
N++;
input >> vec[i];
i++;
}

它正确地创建了一个包含 400 个元素的 vector ,但是 txt 文件的第一行被忽略了(我最终得到的是 vec[0] = txt 文件的第二行而不是第一行)并且第 399 个元素是 399 而不是 txt 的第 400 行文件。

我尝试了其他几种方法来提取这些数据,但都没有成功。

感谢您的帮助!

编辑:

我根据一些评论编辑了代码:

vector <double> vec;
string line;
double num;

while (getline(input, line))
{
input >> num;
vec.push_back(num);
}

不幸的是,它仍然跳过我的文本文件的第一行。

编辑 2 --> 解决方案:

感谢您的所有评论,我意识到在同时使用 getline 和 input >> num 时我做错了什么;

问题是这样解决的:

double num;
vector <double> vec;

while (input >> num)
{
vec.push_back(num);
}

最佳答案

只需将 std::istream_iterator 传递给 std::vector 构造函数,您就可以将整个文件读入一个 vector ,无需循环:

std::vector<int> v{
std::istream_iterator<int>{input},
std::istream_iterator<int>{}
};

例如:

#include <iostream>
#include <iterator>
#include <vector>
#include <exception>

template<class T>
std::vector<T> parse_words_into_vector(std::istream& s) {
std::vector<T> result{
std::istream_iterator<T>{s},
std::istream_iterator<T>{}
};
if(!s.eof())
throw std::runtime_error("Failed to parse the entire file.");
return result;
}

int main() {
auto v = parse_words_into_vector<int>(std::cin);
std::cout << v.size() << '\n';
}

关于c++ - getline从txt文件中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50471600/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com