如何交换文本文件中的行?

时间:2017-03-26 13:52:51

标签: c++ text file-io swap

我有一个文本文件;假设文本文件有10行。 我想在第3行和第6行之间进行交换。

我该怎么办?另外,我无法为交换创建任何临时文件。

2 个答案:

答案 0 :(得分:1)

为使此解决方案正常工作,这些行不能包含单个空格,因为它将用作分隔符。

const std::string file_name = "data.txt";

// read file into array
std::ifstream ifs{ file_name };
if (!ifs.is_open())
    return -1; // or some other error handling
std::vector<std::string> file;
std::copy(std::istream_iterator<std::string>(ifs), std::istream_iterator<std::string>(), std::back_inserter(file));
ifs.close();

// now you can swap
std::swap(file[2], file[5]);

// load new array into file
std::ofstream ofs{ file_name, std::ios_base::trunc };
if (!ofs.is_open())
    return -1; // or some other error handling
std::copy(file.begin(), file.end(), std::ostream_iterator<std::string>(ofs, "\n"));

答案 1 :(得分:0)

警告:这将覆盖原始文件!!!

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

int main()
{
    ifstream in("in.txt");
    if (in.is_open())
    {
        std::vector<std::string> content;
        for (std::string line; std::getline(in, line); )
        {
            content.push_back(line);
        }
        in.close();
        std::iter_swap(content.begin() + 2, content.begin() + 5);

        ofstream out("in.txt");
        if (out.is_open()) {
            for (auto i : content)
            {
                out << i << std::endl;
            }
            out.close();
        }
    }
}