我正在寻找一种方法来搜索文本文件中的特定字符,并在每个p.move_is_possible(board, ans, piece_list, squares)
之后添加换行符
这很重要,它是一个很大的文档(2.7MB)。
答案 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;
}