聞きたいのは、Cでテキストファイルを下から上に読み取る機能があるということですか?
Exp:テキストコンテンツはabcdef
->取得しfedcba
ます。
そのような関数がない場合は、テキストコンテンツを配列に渡し、配列を逆にすることを考えていますが、大丈夫ですか?この質問に対するより良い解決策はありますか:)
聞きたいのは、Cでテキストファイルを下から上に読み取る機能があるということですか?
Exp:テキストコンテンツはabcdef
->取得しfedcba
ます。
そのような関数がない場合は、テキストコンテンツを配列に渡し、配列を逆にすることを考えていますが、大丈夫ですか?この質問に対するより良い解決策はありますか:)
これを行うための関数は標準ライブラリにありません。データを可変char配列に渡し、インプレースリバースを実行できます。
これは明らかにファイルを下から上に読み取るのではなく、最初から最後まで読み取り、O(N)時間とO(1)スペースの複雑さを使用します。シーク位置をいじって、逆方向に読み込もうとすることができます。パフォーマンスを見るのは面白いでしょう。
追加情報のためだけに
複雑さの分析については、 http://www.geeksforgeeks.org/an-in-place-algorithm-for-string-transformation/を参照してください。
次のコードはあなたの目的に役立つかもしれません、
char a[MAX];
int flag=1,i=0;
fseek(fp, 0, SEEK_END);
while(flag>0)
{
a[i]=fgetc(fp);
i++;
if(fseek(fp,-2,SEEK_CUR)==-1)
{
flag=0;
}
}
fseek()
標準関数を使用して、下から読み取る独自の関数を開発できます。
char *my_read(FILE *fp)
{
int i, size;
char *buffer;
fseek(fp, 0, SEEK_END);
size = ftell(fp);
buffer = malloc((size+1) * sizeof(char));
for (i=0; i<size; i++)
{
fseek(fp, size-1-i, SEEK_SET);
buffer[i] = fgetc(fp);
}
buffer[size] = 0;
return buffer;
}
最初から読み取るが、配列の下部から保存を開始する独自の関数を開発できます。
この関数は次のようになります。
fseek
読むたびに使うよりも簡単です
char *my_read(FILE *fp)
{
int i, size;
char *buffer;
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = malloc((size+1) * sizeof(char));
for (i=(size-1); i>=0; i--)
{
buffer[i] = fgetc(fp);
}
buffer[size] = 0;
return buffer;
}