C:替换文件中的字符串而不使用临时文件或加载到内存中

标签 c file

我正在准备考试,很可能会遇到这样的问题:

编写一个 C 程序,处理用字符串 B 替换字符串 A 的文件,而不使用临时文件或将文件加载到内存中。

实际上并不总是这样,但有点像。字符串 A 和 B 可以是任意长度(A < B、A > B 或 B 可能取决于其他长度)。

尝试这样做我会发疯的!我不是要求代码,而是要求有关使用 fseek、fgetc、fputc 等的组合或其他内容的一些指导。这个问题很奇怪,最常见的就是要么将整个文件加载到内存中,要么使用临时文件,我在其他地方没有找到类似的东西

编辑: 我可以使用 posix 的 ftruncate

最佳答案

算法:

  1. 去逐个字符地阅读。直到找到[0]保存此地址。
  2. 现在逐个字符读取 (fgetc) 并检查每个 i 是否为 fileChar=a[i]。
  3. 如果没有寻求地址+1并转到1。
  4. 如果是,您将寻求解决并写信。

如果 B>A,您可以查找文件末尾 end 将每个字符写入下一个位置,直到有足够的空间放置 B。类似的解决方案是如果 A>B。但相反。

他们是找到 A 位置的更好解决方案。 您可以为此使用滚动哈希。 https://en.wikipedia.org/wiki/Rolling_hash

关于C:替换文件中的字符串而不使用临时文件或加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929384/

相关文章:

linux - 在 PHP 中从 NAS linux 网络检索文件

python - 包装类 : Creating a python wrapper for a C project

C 内存地址和值

c - "file pointer"、 "stream"、 "file descriptor"和... "file"之间的区别?

连接两个文件指针

c - 如何使用 C 中的 CSV 文件中的字符串 (char*) 填充二维数组

Java 如何从任何用户的桌面读取/写入文件

c - 霍夫曼算法需要帮助存储字符代码

c - 为什么在从没有任何目标文件的静态库创建 EXE 时需要手动链接 C 运行时库?

检查下一行