将输入值存储到数组中,同时读取它们,C ++

时间:2018-09-02 23:27:59

标签: c++ arrays

我对C ++很陌生。我试图逐行读取文件并将输入存储到几个数组中。 因为我不知道输入文件的大小,所以我有这个来获取文件中的行数

i.png

现在,我想使用numOfLines作为数组的大小,但是我无法通过使它运行

while (std::getline(inputFile, line)){
    ++numOfLines; 
    std::cout << line << std::endl;
}

我猜是因为它在while循环之后已经到达文件的末尾。但是我不知道如何解决这个问题。有没有一种方法可以扫描输入文件并将其值同时存储到数组中?

2 个答案:

答案 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(例如: vectordequelist等),而不是原始数据结构

请注意,尽管以下示例选择vector作为其容器,但它可能根据不同的上下文而有所不同。假设您正在处理大量数据,则可能要使用list123

#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;
}