在C中自下而上读取文本文件

时间:2013-03-25 13:58:12

标签: c

我想问的是,有一个函数可以从C自下而上读取文本文件吗?

Exp:文字内容为abcdef - >我们将获得fedcba

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

4 个答案:

答案 0 :(得分:1)

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

这显然不会从底部到顶部读取文件,它从头到尾读取并使用O(N)时间和O(1)空间复杂度。你可以玩寻找位置并试图向后看;看到表演会很有意思。

仅供参考

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

答案 1 :(得分: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;
    }
}

答案 2 :(得分: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;
}

答案 3 :(得分:1)

您可以开发自己的功能,从头开始读取,但从底部开始保存在数组中。

此功能将:

  1. 获取文件的大小
  2. 使用(size + 1)
  3. 分配char缓冲区
  4. 从头开始读取文件,同时从头开始填充char数组
  5. 每次阅读时都比使用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;
    }