我正在准备考试,很可能会遇到这样的问题:
编写一个 C 程序,处理用字符串 B 替换字符串 A 的文件,而不使用临时文件或将文件加载到内存中。
实际上并不总是这样,但有点像。字符串 A 和 B 可以是任意长度(A < B、A > B 或 B 可能取决于其他长度)。
尝试这样做我会发疯的!我不是要求代码,而是要求有关使用 fseek、fgetc、fputc 等的组合或其他内容的一些指导。这个问题很奇怪,最常见的就是要么将整个文件加载到内存中,要么使用临时文件,我在其他地方没有找到类似的东西
编辑:
我可以使用 posix 的 ftruncate
最佳答案
算法:
- 去逐个字符地阅读。直到找到[0]保存此地址。
- 现在逐个字符读取 (fgetc) 并检查每个 i 是否为 fileChar=a[i]。
- 如果没有寻求地址+1并转到1。
- 如果是,您将寻求解决并写信。
如果 B>A,您可以查找文件末尾 end 将每个字符写入下一个位置,直到有足够的空间放置 B。类似的解决方案是如果 A>B。但相反。
他们是找到 A 位置的更好解决方案。 您可以为此使用滚动哈希。 https://en.wikipedia.org/wiki/Rolling_hash
关于C:替换文件中的字符串而不使用临时文件或加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929384/