如何比较两个文件中的字符串?

时间:2014-07-24 15:36:16

标签: c arrays string file compare

我是C的新手,在这个项目中我会得到任何帮助。我需要一个关于这个项目的专家建议,他们曾经尝试过类似的项目吗?

我将使用C来读取两个文件(包含字符串数组或只是性能最佳的字符串和数字)并逐行比较两个文件中的字符串(第一个文件中的第一行)第二个文件中的第一行,第一个文件中的第二行,第二个文件中的第二行...),如果它们匹配或不匹配则打印它们。我需要找到完成此操作的最快方法(如果需要,我也可以更改文件结构)。下面的示例文件;

File1:                            File2:

Dens1                             Dens1
Hige0                             Hige1
Alte1                             Alte0
Some1                             Some1

我考虑了以下选项;

option1:

fopen
fgets
memcmp/strcmp/strstr
printf

option2:

open
mmap the file
search and pointer the data from mmap
close

option3:

Reading second file completely and store the content in a array. Then read from the first file and compare.

option4:
your opinion?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

最佳解决方案在很大程度上取决于您的文件内容。如果您知道文件已排序,则可以逐行同时读取这两个文件。如果您的文件非常大(相对于可用的RAM),那么需要将整个文件读入内存的方法将无效。

您需要更好地定义问题,以获得足够的信息来确定最佳解决方案。

答案 1 :(得分:0)

AdamO,这是实现你想要的一种简单方法。 祝你好运。

#include<stdio.h>

int main()
{
    char str1[30], str2[30];
    FILE *fpOne, *fpTwo;
    int x = 0;
    int numberOfLines = 0;
    char ch;

    //Assuming both files has the same number of lines
    fpOne = fopen("FileTextOne.txt","r");
    do
    {
        ch = fgetc(fpOne);

        if(ch=='\n')
        {
            numberOfLines++;
        }

    }while(ch != EOF);
    fclose(fpOne);



    fpOne = fopen("FileTextOne.txt","r");
    fpTwo = fopen("FileTextTwo.txt","r");

    do
    {
        fscanf(fpOne,"\n%s", str1);
        fscanf(fpTwo,"\n%s", str2);

        if(strcmp(str1, str2) == 0)
        {
            printf("%s\t", str1);
            printf("%s\t", str2);
            printf("\t - are identical Strings.\n");
        }
        else
        {
            printf("%s\t", str1);
            printf("%s\t", str2);
            printf("\t - are not identical Strings.\n");
        }

        x++;

    }while(x!=(numberOfLines+1));


    fclose(fpOne);
    fclose(fpTwo);
    return(0);
}

FileTextOne

Dens1
Hige0
Alte1
Some1

驴子

FileTextTwo

Dens1
Hige0
Alte1
Some1

驴子