2

聞きたいのは、Cでテキストファイルを下から上に読み取る機能があるということですか?

Exp:テキストコンテンツはabcdef->取得しfedcbaます。

そのような関数がない場合は、テキストコンテンツを配列に渡し、配列を逆にすることを考えていますが、大丈夫ですか?この質問に対するより良い解決策はありますか:)

4

4 に答える 4

1

これを行うための関数は標準ライブラリにありません。データを可変char配列に渡し、インプレースリバースを実行できます。

これは明らかにファイルを下から上に読み取るのではなく、最初から最後まで読み取り、O(N)時間とO(1)スペースの複雑さを使用します。シーク位置をいじって、逆方向に読み込もうとすることができます。パフォーマンスを見るのは面白いでしょう。

追加情報のためだけに

複雑さの分析については、 http://www.geeksforgeeks.org/an-in-place-algorithm-for-string-transformation/を参照してください。

于 2013-03-25T14:02:15.970 に答える
1

次のコードはあなたの目的に役立つかもしれません、

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;
    }
}
于 2013-03-25T14:28:08.113 に答える
1

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;
}
于 2013-03-25T14:48:35.917 に答える
1

最初から読み取るが、配列の下部から保存を開始する独自の関数を開発できます。

この関数は次のようになります。

  1. ファイルのサイズを取得する
  2. (サイズ+ 1)でcharバッファを割り当てます
  3. ファイルを最初から読み取り、同時にchar配列を最後から入力し始めます

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;
}
于 2013-03-25T15:24:56.073 に答える