c ++删除文本文件中的整行

时间:2019-01-09 10:53:33

标签: c++

如何仅通过搜索一行中的单个单词来删除整行? 例如:“我要删除此行”(这是该行中的句子),我将仅搜索删除的单词,而该行中的其余单词将被删除?

这是我的代码

string deleteline;
string line;

ifstream fin;
fin.open("example.txt");
ofstream temp;
temp.open("temp.txt");
cout << "Enter word: ";
cin >> deleteline;


while (getline(fin,line))
{
    if(line != deleteline)
    temp << line << endl;
}
temp.close();
fin.close();
remove("example.txt");
rename("temp.txt","example.txt");

2 个答案:

答案 0 :(得分:0)

您可以使用以下算法:

  • 查找行的起始位置。
  • 找到行的结尾。
  • 将行后的字符复制到文件中该行开始的位置。重复直到读取位置到达文件末尾。
  • 调整文件大小以匹配旧长度减去已删除行的长度。

或以下内容:

  • 逐行读取源文件。
  • 如果该行不是您要搜索的行,则将其复制到新文件中。
  • 重复直到源文件结束。
  • 将新文件移到旧文件上。

后一种算法可能会更慢,因为它还会复制文件的开头,但是在操作中断时更安全。

答案 1 :(得分:-2)

请使用sstringstream对行进行标记化,以使单词与预期标记匹配,然后将该行写入新文件中