c - 用 C(或只是算法)编写程序来搜索和替换文件中的字符的有效方法是什么?

标签 c file-io text-processing replace

用户将在运行时提供2个字符串,例如“asdf”“qwer”, 现在,每个出现的“a”都应替换为“q”,“s”替换为“w”,“d”替换为“e”,“f”替换为“r” 字符串的长度可能会有所不同。 现在的重点是要操作的文件很大,3-4 TB,所以我们需要一个效率为“n”或“n(log(n))”的高效程序,一系列 if...else不会有帮助。 给出的提示是: 1.>文件中没有特殊字符或空格。它仅由小写字符组成 2.>程序应该利用文件中只有 26 个字符的事实。 3.>最后,解决方案是使用字符的ascii值来完成的。

其他详细信息 文件应该是关于一个人的论文,所以它不是一个序列。 是的,我们必须按顺序读取整个文件,唯一不应该做的就是对每个字符进行比较,即 if(a)then(q)elseif(s)then(w)....something...效率更高???

请帮忙

最佳答案

在程序开头创建一个包含 26 个字符的数组。然后替换这个数组中你想要的那些。然后解析整个文件,用表值替换每个字符。

char charsToReplace = "asdf";
char replaceBy = "qwer";
charsToReplaceCount = 4;

char replaceTable[26] = {'a', 'b', 'c', ... , 'z'}

for (int i=0; i<charsToReplaceCount; ++i)
{
    replaceTable[charsToReplace[i] - 'a'] = replaceBy[i];
}

...

for (int i=0; i<fileLengthChunk; ++i)
{
    file[i] = replaceTable[file[i] - 'a'];
}

由于文件很大,我跳过了文件的读写以及分块。

关于c - 用 C(或只是算法)编写程序来搜索和替换文件中的字符的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4747727/

相关文章:

c++ - Printf 和 scanf 在没有 stdio.h 的情况下工作,为什么?

Swift 项目中的 C 代码

c++ - 随机访问文件无法正常工作

python - 使用正则表达式解析 Snort 警报文件

linux - 如何根据文件B中的行号替换文件A中的某些行

c - 在 C 中将 Unsigned Long Long 类型转换为字符指针

c - printf 不打印到屏幕

file-io - 在C#控制台中打开%appdata%中的.exe文件

java - 检查文件是否是系统/操作系统文件?

nlp - 在 google-diff-match-patch 中执行 diff 时如何忽略某些字符?