C ++在文本文件中的特定字符后插入新行

时间:2018-12-30 14:01:46

标签: c++ string file fstream ifstream

我正在寻找一种方法来搜索文本文件中的特定字符,并在每个p.move_is_possible(board, ans, piece_list, squares)之后添加换行符

这很重要,它是一个很大的文档(2.7MB)。

2 个答案:

答案 0 :(得分:1)

正如SomeProgrammerdude在注释中指出的那样,插入到现有文件中实际上是不可行的,您的选择之一是将其全部读取到单个std::string中并写回到相同的文本文件中。 /> 这是一个示例实现。我们一次阅读宪章,检查它是否为分号,并在每个分号后添加换行符。请注意reserve部分,尽管有建议,但这不是必需的:

#include <string>
#include <fstream>
#include <stdexcept>

int main()
{
  std::fstream f("test.txt", std::ios::in);

  if (!f.is_open()) {
    throw std::runtime_error("Failed to open file");
  }

  std::string contents;
  contents.reserve(10000); // reserve some space for better efficiency
  char ch;
  while (f.get(ch)) {
    contents.push_back(ch);
    if (ch == ';')
      contents.push_back('\n');
  }

  f.close();
  f.open("test.txt", std::ios::out);
  if (!f.is_open()) {
    throw std::runtime_error("Failed to open file");
  }
  f << contents;
  f.close();
  return 0;
}

输入:

line line line line; line line line line; line line line; line line

输出:

line line line line;
 line line line line;
 line line line;
 line line

请注意行前的前导空格。这是因为我们在每个'\n'之后附加了';',但并未替换空格。

答案 1 :(得分:1)

您不能在现有文件的中间插入新字符,只能追加到末尾。您将必须创建一个新文件,将字符从旧文件复制到新文件,并根据需要插入新字符。例如:

#include <string>
#include <fstream>

int main()
{
    std::ifstream inFile("input.txt");
    if (!inFile.is_open())
    {
        std::cerr << "Failed to open input file";
        return 1;
    }

    std::ofstream outFile("output.txt");
    if (!outFile.is_open())
    {
        std::cerr << "Failed to create output file";
        return 1;
    }

    std::string line;
    while (std::getline(inFile, line, ';'))
    {
        outFile << line;
        if (!inFile.eof())
            outFile << ";\n";
    }

    return 0;
}