0

我正在将文本从一个文件复制到另一个文件,并进行了某些更改。

我有 input.txt、tmp.txt 和 output.txt。

这个想法是将几行复制到 tmp.txt(直到我们到达分隔符),将文本从 tmp.txt 移动到 output.txt,擦除 tmp.txt,然后继续循环直到我们到达输入的末尾。文本。

我在处理 tmp.txt 文件时遇到问题。在我第一次复制内容后,它停止接受新文本,即使在我关闭、删除并重新打开文件进行写入之后也是如此。我的代码变得非常混乱。

任何人都可以提出一种巧妙的方法吗?(应对 tmp.txt,从 tmp.txt 复制,擦除 tmp.txt 继续循环)

Nb 这是一个子任务,我被一个家​​庭作业问题困住了——我正在从文本文件中删除 c++ 注释。

编辑:对于任何想知道为什么我需要 tmp.txt 的人:如果程序遇到*/(关闭评论)而没有打开评论,那么它将需要将它之前的所有内容,直到前一个评论,作为一个评论。我正在使用临时来保存可能是也可能不是评论的文本。如果是 - 我将删除 tmp 中的文本,如果不是,我会将 tmp 中的文本复制到 output.txt。

4

4 回答 4

2

将 input.txt 作为 istream 打开,将 output.txt 作为 ostream 打开。从回显所有不属于评论的字符的输入开始读取。当您遇到评论时,不要写入输出。那应该这样做。

于 2009-06-22T18:01:55.470 回答
1

如果您使用的是 C++ fstream 的东西,您可能必须在重新打开流时调用 .clear() 以清除错误标志(例如当您点击 EOF 时设置的标志)。

于 2009-06-22T17:54:59.443 回答
1

我建议你跳过 tmp.txt 文件。只需打开 input.txt 并将数据随机放入 output.txt 就足够了。

于 2009-06-22T17:57:55.773 回答
0

除非实际删除评论是您作业的一部分,否则我建议您编写一些简单的脚本。这是对sed脚本的引用。

如果作业涉及删除评论,您可以将输入文件作为流运行,并在评论中停止写入输出文件。

  • 您可以从检测startend评论开始,
    • 为 C 样式注释和//C++ 样式实现此功能
  • 然后,使用堆栈并放大以检测嵌套评论
    • 在这里,您对两种注释样式的嵌套的理解将有所帮助
  • 最后,您可以检测到#if 0and#endif块 - 只是为了踢:-)
于 2009-06-22T18:00:44.940 回答