我对C ++很陌生。我试图逐行读取文件并将输入存储到几个数组中。 因为我不知道输入文件的大小,所以我有这个来获取文件中的行数
i.png
现在,我想使用numOfLines作为数组的大小,但是我无法通过使它运行
while (std::getline(inputFile, line)){
++numOfLines;
std::cout << line << std::endl;
}
我猜是因为它在while循环之后已经到达文件的末尾。但是我不知道如何解决这个问题。有没有一种方法可以扫描输入文件并将其值同时存储到数组中?
答案 0 :(得分:2)
如果您使用std :: vector,则无需提前知道行数。您可以使用向量方法push_back将新元素插入其中。尝试使用如下内容:
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
std::vector<std::string> first_names;
std::string line;
ifstream input_file;
while (std::getline(input_file, line)){
first_names.push_back(line);
}
for (size_t i = 0; i < first_names.size(); i++) {
std::cout << first_names[i] << std::endl;
}
return 0;
}
答案 1 :(得分:0)
我不知道您是否参加过与 数据结构和算法 相关的课程,
在其中您将学习使用Containers(例如:
vector
,
deque
,
list
等),而不是原始数据结构。
请注意,尽管以下示例选择vector
作为其容器,但它可能根据不同的上下文而有所不同。假设您正在处理大量数据,则可能要使用list
,1,2,3。
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
// alias long type
// @see: https://en.cppreference.com/w/cpp/language/type_alias
using NameVector = std::vector<std::string>;
int handleLine(std::string line, NameVector &firstNames)
{
// TODO implement your line handler here
firstNames.push_back(line);
return 0;
}
int handleFile(std::ifstream inputFile, NameVector &firstNames)
{
std::string line;
for (int lineNum = 1;
// invoke `good` to check if there is any error
inputFile.good()
&&
std::getline(inputFile, line);
lineNum++)
{
std::cout << "Current line number : (" << lineNum << ")" << std::endl;
std::cout << "Current line content: (" << line << ")" << std::endl;
handleLine(line, &firstNames);
}
return 0;
}
int main()
{
std::string path; // = R"(HERE GOES YOUR FILE PATH)";
// Using **Raw string**
std::ifstream inputFile { path }; // Initialize `inputFile`
NameVector firstNames;
handleFile(inputFile, firstNames);
for (auto firstName : firstNames)
{
std::cout << firstName << std::endl;
}
return 0;
}