私は c で自分自身を訓練しています。私の目標は、ファイルを読み取り、その中に特定の文があるかどうかを確認することです。指定された文がファイルに存在するかどうかにかかわらず、関数はそれぞれ「見つかった」または「見つからなかった」を返す必要があります。/
文は記号で区切られています。
Example of file:
1,2,3,4/
car, house, hotel/
2,age,12/
1,2/
1,2,3,5/
house, car/
Example of word to look for:
1,2/
私の考えは、毎回ファイルから文を取得して配列(aryと呼ばれる)に入れ、配列(ary)が、探している特定の文を含む配列(文と呼ばれる)と等しいかどうかを確認することです、その配列 (ary) をファイル内の次の文に再利用します。
私はこのコードを書きました:
#include <stdio.h>
void main()
{
char *sentence;
FILE *my_file;
char *ary;
int size = 500;
int got;
int ind=0;
int rest;
int found=0;
sentence="1,2";
my_file=fopen("File.txt", "r");
if(my_file==NULL)
{
printf("I couldn't open the file\n");
}
else
{
ary = (char*)malloc(500*sizeof(char));
while((got=fgetc(my_file))!=EOF)
{
if(got!='/')
{
ary[ind++]=(char)got;
}
else
{
ary[ind++]='\0';
rest = compare(sentence,ary);
if(rest==0)
{
found =1;
printf("found\n");
return;
}
ind=0;
free(ary);
ary = (char*)calloc(500, sizeof(char));
}
}
if(found==0)
{
printf("not found\n");
}
fclose(my_file);
}
}
int compare(char str1[], char str2[])
{
int i = 0;
int risp;
if(str1>str2 || str1<str2)
{
risp=-1;
}
if(str1==str2)
{
while(str1[i++]!='\0')
{
if(str1[i]!=str2[i]) risp=1;
}
}
return risp;
}
コンパイルはできますが、正しく動作せず、その理由がわかりません。誰かが私の間違いを指摘したり、より良い解決策を教えてもらえますか?
編集:文に関連する2つのstrを印刷すると問題ありませんが、最初の印刷後のもう1つは、単語の前に区切りを付けて印刷を続けます。次のように:
Str1:1,2
Str2:1,2,3,4
Str1:1,2
Str2:
car, house, hotel
Str1:1,2
Str2:
2,age,12
Str1:1,2
Str2:
1,2
Str1:1,2
Str2:
1,2,3,5
Str1:1,2
Str2:
house, car
これは私の問題ですか?私はそれを解決しようとしました...