C/C++:文件对碰

来源:互联网 发布:vb 调用bartender 编辑:程序博客网 时间:2024/06/05 07:28

比对两个输出文件,然后输出不同的地方,用于测试,算法题实在找不出bug的地方。

/** 20171030*/#include <cstdio>#include <cstring>using namespace std;#define maxn 1000const char colorA[10] = "\e[01;31m";const char colorB[10] = "\e[01;34m";const char colorC[10] = "\e[01;32m";const char colorS[10] = "\e[0m";const char keyA = '\r';const char keyB = '\n';char filenameA[100];char filenameB[100];FILE* fileAp = NULL;FILE* fileBp = NULL;char ansA[maxn];char ansB[maxn];int res[maxn];int linenum = 0;int colA = 0;int colB = 0;void solve(){    int lenA = strlen(ansA);    int lenB = strlen(ansB);    if(lenA!=lenB)    {         printf("line:%d %s(A)%s(A) %s(B)%s(B) %s\n",linenum,colorA,ansA,colorB,ansB,colorS);        return ;    }    memset(res,0,sizeof(res));    bool flag = true;    for(int i=0;i<lenA;i++) if(ansA[i]!=ansB[i]){ res[i] = 1;flag = false;}    if(flag) return ;    printf("line:%d %s(A)",linenum,colorA);    for(int i=0;i<lenA;i++)         if(res[i]==1) printf("%s%c%s",colorC,ansA[i],colorA);        else printf("%c",ansA[i]);    printf("(A) %s (B)",colorB);    for(int i=0;i<lenA;i++)         if(res[i]==1) printf("%s%c%s",colorC,ansB[i],colorB);        else printf("%c",ansB[i]);    printf("(B)%s\n",colorS);}int main(int argc,char** argv){    if(argc<3)    {        printf("%sError :: %sNeed Two filename%s\n",colorA,colorB,colorS);        return 0;    }    strcpy(filenameA,argv[1]);    strcpy(filenameB,argv[2]);    fileAp = fopen(filenameA,"r");    fileBp = fopen(filenameB,"r");    if(fileAp==NULL)    {        printf("%sError :: %scan not find file named '%s'.%s\n",colorA,colorB,filenameA,colorS);        return 0;    }       if(fileBp==NULL)    {        printf("%sError :: %scan not find file named '%s'.%s\n",colorA,colorB,filenameB,colorS);        return 0;    }    char a;    char b;    while(fscanf(fileAp,"%c",&a)!=EOF&&fscanf(fileBp,"%c",&b)!=EOF)    {        memset(ansA,0,sizeof(ansA));        memset(ansB,0,sizeof(ansB));        linenum++;        colA = 0;        colB = 0;        if(a!=keyB)        {            ansA[colA++] = a;            while(fscanf(fileAp,"%c",&a)!=EOF&&a!=keyB) ansA[colA++] = a;        }        if(b!=keyB)        {            ansB[colB++] = b;            while(fscanf(fileBp,"%c",&b)!=EOF&&b!=keyB) ansB[colB++] = b;        }        solve();    }    printf("\n%sThe A End\n",colorA);    while(fscanf(fileAp,"%c",&a)!=EOF) printf("%c",a);    printf("\n%sThe B End\n",colorB);    while(fscanf(fileBp,"%c",&b)!=EOF) printf("%c",b);    printf("%s\n",colorS);    fclose(fileAp);    fclose(fileBp);    return 0;}
原创粉丝点击