2011-06-29 8 views
0

私は2つのファイルを1行ずつ比較していて、スペースで読むことができないようにする方法があるのだろうかと思っていました。例えば、一つのファイルはスペースを読み込まないためにfgetsを使うにはどうすればいいですか?

hello world 

を持っており、別のファイルには

hello  world 

を持っていた場合、私は真ん中の最初の2つのスペースとスペースを無視して、両方のこれらの行が等しいことを返すようにしたいです。

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
#define BUFSIZE 1024 


int linecmp(FILE *fp1, FILE *fp2); 
int charcmp(FILE *fp1, FILE *fp2); 
int wordcmp(FILE *fp1, FILE *fp2); 

int main(int argc, char * argv[]) 
{ 
size_t i; 
FILE *fp1; 
FILE *fp2; 

fp1 = fopen("input.txt", "rb+"); 
fp2 = fopen("input2.txt", "rb+"); 



printf("%d",linecmp(fp1, fp2)); 


return 0; 
} 

int linecmp(FILE *fp1, FILE *fp2) 
{ 
char line[BUFSIZE]; 
char line2 [BUFSIZE]; 
size_t linecount = 0; 
size_t linecount2 = 0; 

/*reads from first file pointer*/ 
while(fgets(line,BUFSIZE, fp1)) 
{ 
    ; 
} 
/*reads from second file pointer*/ 
while(fgets(line2,BUFSIZE, fp2)) 
{ 
    ; 
} 
return 0; 
} 

答えて

3

いいえ、fgets機能にはこのような機能はありません。自分でスペースを削除する必要があります。

しかし、おそらくではないすべてスペース。あなたの仕事の目的のために、「こんにちは世界」は「helloworld」とのマッチとみなされるべきですか?そうでない場合は、先頭のすべての と末尾の空白を削除する必要がありますが、内部の空白をもう少し注意して処理する必要があります。おそらく の空白文字を1つの空白に置き換えてから比較します。

+0

私はそのようなことを考えましたが、スペースをスキップするためにsscanfを使用することを考えていましたが、 "hello [SPACE] [SPACE] world"のような "%s" – user798774

+0

@user:sscanfの問題は、一般的に、行内にいくつの「単語」があるのか​​わからないことです。また、ループ内でsscanfを使用して一度に1単語を取得しようとすると、スキップしたスペースの数がわからないため、次の単語の検索はどこから始まりますか?行を読み込んだら、文字を1文字ずつ探したり、スペースと非スペースを探したり、保存したい文字だけを含む新しい文字列を作成したりする必要があります。 –

1

scanf() sscanf()で "%s"を使用して空白をスキップするとどうなりますか?

+1

私の悪いです。私はsscanfを意味しました – i0exception

+0

ええ、私はsscanfで試しましたが、 "hello world"というフレーズがある場合、 "hello"と読むだけです。 – user798774

+0

行の最後に到達するまでsscanf()をやり続ける必要があります。あなたのsscanf()は効果的にループに入ります。 – i0exception

関連する問題