首页 > 试题广场 >

比较两个文本文件是否相等: 比较两个文本文件的内容是否相同,

[问答题]

比较两个文本文件是否相等: 比较两个文本文件的内容是否相同,并输出两个文件中第一次出现不同字符内容的行号及列值。试编写相应程序。

#include <stdio.h>
#include <string.h>
#define MA 255
int icmp(const char *a,const char *b)
{
int i;
for (i = 0; a[i]&&b[i]; i++) {
if (a[i]!=b[i]) {
break;
}
}
return i+1;
}
int main(void)
{
FILE *fp1,*fp2;
int n=0,fg=0;
char c1[MA],c2[MA];
fp1=fopen("c:\\a.txt","r"); /*第一个文件*/
fp2=fopen("c:\\b.txt","r"); /*第二个文件*/
while (!feof(fp1)&&!feof(fp2))
{
fgets(c1,MA,fp1);
fgets(c2,MA,fp2);
++n;
if (strcmp(c1,c2)) {
printf("第%d行第%d个字符不相同\n",n,icmp(c1,c2));
fg=1;
}
fflush(fp1);
fflush(fp2);
}

if (!fg) {
printf("两个文件相同");
}
else if (!feof(fp1)||!feof(fp2)) {
printf("第%d行不相同",n);
}
fclose(fp1);
fclose(fp2);
return 0;
}
发表于 2018-12-18 13:31:37 回复(0)
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    FILE *fp1,*fp2;
    char ch1,ch2;
    int cnt_row=1,cnt_column=0,flag=1;      //flag用于标志是否有不同的地方,默认相同
    //行号row每次遇到‘\n’时++;列号每次读入一个字符++,换行后清零

    if((fp1 = fopen("test3.1.txt","r"))==NULL||(fp2 = fopen("test3.2.txt","r"))==NULL){
        printf("file read error\n");
        exit(0);
    }

    while( ( (ch1=fgetc(fp1) )!=EOF) &&( (ch2=fgetc(fp2)) !=EOF) ){
        cnt_column++;
        if(ch1 != ch2){
            printf("not equal! %d row,%d column\n",cnt_row,cnt_column);
            flag = 0;   //遇到了不同的字符,改变flag
            break;      //保证只输出第一个不同的字符
        }
        if(ch1=='\n'){
            cnt_row++;
            cnt_column = 0;
        }
    }
    if(flag)
        printf("both files are the same\n");

    return 0;
}

发表于 2022-03-05 17:01:38 回复(0)