2

我想问一下 C 中有从下往上读取文本文件的功能吗?

Exp: text content is abcdef--> 我们会得到fedcba.

如果没有这样的功能,我正在考虑将文本内容传递到数组中,然后反转数组,可以吗?你对这个问题有更好的解决方案吗:)

4

4 回答 4

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

标准库中没有执行此操作的函数。您可以将数据传递到可变 char 数组并执行就地反转。

这显然不是从底部到顶部读取文件,而是从头到尾读取并使用 O(N) 时间和 O(1) 空间复杂度。您可以使用搜索位置并尝试向后阅读;看到表演会很有趣。

仅供参考

有关复杂性分析,请参见http://www.geeksforgeeks.org/an-in-place-algorithm-for-string-transformation/

于 2013-03-25T14:02:15.970 回答
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. 用 (size + 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 回答