поиск в файле для определенной строки 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 реализация memcmp ) приведет к разнице в 100% …

У вас, наверное, много чтения. Вышеупомянутая ссылка может предоставить вам исходную точку.

Опять же, если вы не смотрите на задание на домашнюю работу / изобретать-колесо, вы можете захотеть использовать существующую работу. Например, запустите два файла через diff -y --suppress-common-lines | wc -l diff -y --suppress-common-lines | wc -l и plain wc -l , собрать выходные данные этих двух вызовов и вычислить процент. Да, это выглядит грубо, но это намного проще и быстрее, чем писать собственный алгоритм. Вы также выиграете от будущих улучшений инструмента diff , сопровождающие которого тратят все свое время на этот материал.

Опять же, я сделал бы это в bash, а не в C.;)