我需要找到一种从文件中读取最后6行数据的方法。

例如,如果我有
1个
2
3
4
5
6
7
8
9
10

我需要阅读才能获得
10、9、8、7、6、5、4。

然后需要将它们放入变量或字符串中,以便以后输出。目前,我已经设法读取文件的最后一行,但是我不知道如何读取其他5个数字。

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    std::ifstream in("test.txt");

    if (in.is_open())
    {
        std::vector<std::string> lines_in_reverse;

        std::string line, line2;

        while (std::getline(in, line))
        {
            // Store the lines in reverse order.
            lines_in_reverse.insert(lines_in_reverse.begin(), line);



        }
        cout << line << endl;
        while (std::getline(in, line2))
        {
            // Store the lines in reverse order.
            lines_in_reverse.insert(lines_in_reverse.begin(), line2);



        }
        cout << line2 << endl;
    }

    cin.get();
    return 0;
}


谁能建议一种解决方法?我不知道可以提供帮助的任何功能或方法。

编辑

此方法从文件输出最后6个数字,但是它们是向后的,我需要一种方法来反转它们并摆脱打印出来的空白。

我不确定如何使用反向以及对此需要哪些参数-http://en.cppreference.com/w/cpp/algorithm/reverse

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    char x;
    ifstream f("test.txt", ios::ate);
    streampos size = f.tellg();
    for (int var = 1; var <= size; var++){
        f.seekg(-var, ios::end);
        f.get(x);
        reverse(x);
        cout << x;
    }
    cin.get();
    return 0;
}


很多答复显示了如何使用向量而不是最后6个数字来反转文本文件,这是我唯一需要的信息。

问候

最佳答案

存储您阅读的所有行不是一个好主意,因为可能会有例如十亿行。

您只需要存储最后的6。

下面的代码旨在按相反的顺序生成这些行,因为问题表明这是必需的:

#include <iostream>
#include <string>
#include <deque>
using namespace std;

auto main() -> int
{
    string          line;
    deque<string>   last_lines;
    while( getline( cin, line ) )
    {
        if( last_lines.size() == 6 )
        {
            last_lines.pop_back();
        }
        last_lines.push_front( line );
    }

    for( auto const& s : last_lines )
    {
        cout << s << endl;
    }
}


这里的输出不完全是问题的示例


  ” 10、9、8、7、6、5、4


因为那是7行,与第一句中提到的6行相反。

关于c++ - 以相反的顺序从文本文件中读取行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27752672/

10-15 16:48
查看更多