在文件中搜索特定的行c代码

我正在研究C.我想问一下在文件中搜索特定行(或多行)的最佳方法是什么? 有人可以举个例子。 我有2个文件,我想看看这两个文件是否80%相同。 我想在其中一个文件中搜索其他文件中的某些特定行。 谢谢

我需要一些C代码示例。 这是一个小例子

int compareFile(FILE* file_compared, FILE* file_checked) { bool diff = 0; int N = 65536; char* b1 = (char*) calloc (1, N+1); char* b2 = (char*) calloc (1, N+1); size_t s1, s2; do { s1 = fread(b1, 1, N, file_compared); s2 = fread(b2, 1, N, file_checked); if (s1 != s2 || memcmp(b1, b2, s1)) { diff = 1; break; } } while (!feof(file_compared) || !feof(file_checked)); free(b1); free(b2); if (diff) return 0; else return 1; } 

如何返回相同行的百分比?

你试过http://www.text-compare.com/吗? 这是比较两个文件并找出差异的简单方法。

如果你真的需要在C中实现,为什么不有两个文件处理程序,每个换行读取字符串,比较两个字符串,如果它们匹配保留它们,如果不匹配,则遍历字符以找到差异。

或者您可以加载主文件,然后将比较文件与主文件中的每一行进行比较,并查看是否有任何行给出匹配> 75%并显示更改。

你能展示你到目前为止所做的一切吗?

diff算法的真正问题在于您不能简单地逐行比较。 假设文件几乎相同,但是一个文件在文件的开头有一个额外的行。 一个天真的(逐行memcmp )实现将导致100%的差异……

你可能有很多阅读要做。 上面的链接可能为您提供一个起点。

再说一遍,如果你不是在看家庭作业/重新发明轮子式的作业,你可能希望以现有作品为基础。 比如,通过diff -y --suppress-common-lines | wc -l运行这两个文件 diff -y --suppress-common-lines | wc -l和plain wc -l ,收集这两个调用的输出,并计算百分比。 是的,这看起来粗糙,但它比编写自己的diff算法更容易,更快捷。 你也将受益于diff工具的未来改进,其维护者将所有时间花在这些东西上。

再说一次,我是用bash做的,而不是用C.;)