【发布时间】:2018-10-20 19:44:21
【问题描述】:
例如,我有一个包含 400 多个英文单词的索引文本文件,然后我有另一个文本文件,每行都有解密的文本。
我想用我的解密文本文件的每一行检查索引文件中的每个英文单词(因此检查 400 多个英文单词是否匹配每行解密文本)
我正在考虑使用strncmp(decryptedString, indexString, 10),因为我知道如果下一个字符是NULL,strncmp 就会终止。
我的解密文本文件的每一行有 352 个字符长,其中存储了大约 4000 万行文本(每一行来自不同的输出)。
这是解密一个公平密码;我知道我的解密算法有效,因为我的教授给了我们一个例子来测试我们的程序,它运行良好。
我已经连续六天在这个项目上工作,这是我唯一坚持的部分。我根本无法让它工作。我试过使用
while(getline(&line, &len, decryptedFile) != -1){
while(getline(&line2, &len2, indexFile) != -1){
if(strncmp(decryptedString, indexString, 10) == 0){
fprintf(potentialKey, "%s", key);
}
}
}
但我从来没有得到任何匹配。我尝试将每个字符串存储到数组中并一次测试一个字符,但这对我也不起作用,因为它会列出所有英文单词都在一行上。我只是迷路了,所以任何正确方向的帮助或指示将不胜感激。提前谢谢你。
编辑:根据 Clifford 在 cmets 的建议,这是我正在尝试做的一个示例
假设 indexFile 包含:
HELLO
WORLD
PROGRAMMING
ENGLISH
并且解密后的文件包含
HEVWIABAKABWHWHVWC
HELLOHEGWVAHSBAKAP
DHVSHSBAJANAVSJSBF
WORLDHEEHHESBVWJWU
PROGRAMMINGENGLISH
我正在尝试将 indexFile 中的每个单词与 decryptedFile 进行比较,一次一个。因此 indexFile 中的所有四个单词都将分别与第 1 行、第 2 行、第 3 行、第 4 行和第 5 行进行比较。
【问题讨论】:
-
你考虑过使用 memcmp(const void *str1, const void *str2, size_t n)) 吗?我不明白你为什么只比较 10 个字节
-
考虑
strstr()是否可以提供帮助。还要说明是否需要在ordinary中找到din。 -
我只比较 10 个字节,因为解密后的文本只包含英文单词,所以如果前 10 个字节不匹配,那么我知道这是错误的解密文本,我会移动到下一行。
-
在我的情况下,strstr() 的问题在于它每次都是匹配的,因为如果解密文本,每行中都会找到一个索引中的单词,所以它不会使我的列表更小
-
编辑:乔纳森,你的评论给了我一个想法,我想听听你的意见。如果我删除索引文件中所有
标签: c file-comparison