我想问一下 C 中有从下往上读取文本文件的功能吗?
Exp: text content is abcdef
--> 我们会得到fedcba
.
如果没有这样的功能,我正在考虑将文本内容传递到数组中,然后反转数组,可以吗?你对这个问题有更好的解决方案吗:)
我想问一下 C 中有从下往上读取文本文件的功能吗?
Exp: text content is abcdef
--> 我们会得到fedcba
.
如果没有这样的功能,我正在考虑将文本内容传递到数组中,然后反转数组,可以吗?你对这个问题有更好的解决方案吗:)
以下代码可能符合您的目的,
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;
}
}
标准库中没有执行此操作的函数。您可以将数据传递到可变 char 数组并执行就地反转。
这显然不是从底部到顶部读取文件,而是从头到尾读取并使用 O(N) 时间和 O(1) 空间复杂度。您可以使用搜索位置并尝试向后阅读;看到表演会很有趣。
仅供参考
有关复杂性分析,请参见http://www.geeksforgeeks.org/an-in-place-algorithm-for-string-transformation/
您可以开发自己的函数,使用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;
}