我是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?
感谢您的时间。
答案 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);
}
Dens1
Hige0
Alte1
Some1
狗
驴子
Dens1
Hige0
Alte1
Some1
猫
驴子