用户将在运行时提供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/