2016-06-30 18 views
1

Ich habe zwei Textdateien test1.txt und test2.txt. Jeder von ihnen hat mehrere Zeichenfolgen. Ich möchte sie vergleichen und ausdrucken, wenn sie gleich oder verschieden sind. Mein Code ist wie folgt:Vergleichen Sie Zeichenfolgen aus verschiedenen Textdateien in c

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main(){ 
char temp[100]; 

char const *t1; 
char const *t2; 

FILE *fp1=fopen("test1.txt","r"); 
while((t1=fgets(temp,sizeof(temp),fp1))!=NULL){ 
    FILE *fp2=fopen("test2.txt","r"); 
    while((t2=fgets(temp,sizeof(temp),fp2))!=NULL){ 
      if(strcmp(t1,t2)==0){ 
      printf("same\n"); 
      } 
      else{ 
      printf("Differ\n"); 
      } 
      } 
    fclose(fp2); 
    } 
fclose(fp1); 
} 

Und Textdatei test1.txt:

100100001 
1111 

test2.txt:

10101001 
1001 

Der obige Code erwähnt gibt die folgende Ausgabe:

same 
same 
same 
same 

Das ist eindeutig falsch!

Was mache ich hier falsch? Wie man es repariert?

UPDATE

ich den Code festgelegt. Der folgende Code funktioniert gut, aber lassen Sie mich bitte wissen, ob eine bessere Lösung existiert:

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main(){ 
char temp1[100]; 
char temp2[100]; 

char const *t1; 
char const *t2; 

FILE *fp1=fopen("test1.txt","r"); 
while((t1=fgets(temp1,sizeof(temp1),fp1))!=NULL){ 
    FILE *fp2=fopen("test2.txt","r"); 
    while((t2=fgets(temp2,sizeof(temp2),fp2))!=NULL){ 
      if(strcmp(t1,t2)==0){ 
      printf("same\n"); 
      } 
      else{ 
      printf("Differ\n"); 
      } 
      } 
    fclose(fp2); 
    } 
fclose(fp1); 
} 
+0

Sie lesen eine Zeile von f1 nach temp. Dann liest du eine Zeile von f2 nach temp. Dann überprüfen Sie, ob temp und temp die gleiche Zeichenfolge enthalten, was sie natürlich tun, weil sie dieselbe Variable sind. – immibis

+0

Ja, ich habe es gerade erkannt und den Code geändert (update). – husna

Antwort

1

Try this:

include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

int main() 
{ 
     char temp[100]; 

     char t1[100]; 
     char t2[100]; 

     FILE *fp1=fopen("test1.txt","r"); 
     FILE *fp2=fopen("test2.txt","r"); 

     while((fgets(t1,100,fp1)!= NULL) && (fgets(t2,100,fp2)!= NULL)) 
     { 

       if(strcmp(t1, t2) == 0) 
       { 
         printf("same\n"); 
       } 
       else 
       { 
         printf("NOT same\n"); 
       } 
     } 

} 
+0

fgets (t1,1000, fp1), warum 1000 als 100. – denis

+0

Vielen Dank für den Vorschlag! –

+0

Die Variable Char Temp [100] wird nicht verwendet. Außerdem ist es besser, sizeof (t1) anstelle von 100 als Konstante zu verwenden. – Beka

0

Dont t1 in verwenden, während Schleife Wenn f1 nicht gleich ist, dann auf null kopieren erste Zeichenfolge in f1 zu temp1 Ähnlich, wenn f2.txt ungleich null dann cipy erste Zeichenfolge in f2 zu temp2 Vergleichen Sie nun die Strings temp1 und temp2 mit strcmp (temp1, temp2) Tun Sie dies bis entweder f1.txt oder f2.txt ist gleich Null

+0

Bitte erläutern Sie Ihre Antwort. Dies hilft, wenn andere das gleiche Problem haben. –

+0

http://StackOverflow.com/a/38114757/6529466 –

+0

Mein Konzept ist das gleiche wie Code oben genannten Link –

Verwandte Themen