我想問的是有一個函數可以從C中自下而上讀取文本文件?我們會得到fedcba
。讀取文本文件底部向上在C
如果沒有這樣的功能,我正在考慮將文本內容傳遞到數組中,然後顛倒數組,然後反向?你有這個問題的更好的解決方案:)
我想問的是有一個函數可以從C中自下而上讀取文本文件?我們會得到fedcba
。讀取文本文件底部向上在C
如果沒有這樣的功能,我正在考慮將文本內容傳遞到數組中,然後顛倒數組,然後反向?你有這個問題的更好的解決方案:)
你可以開發自己的功能,使用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;
}
標準庫沒有功能來做到這一點。您可以將數據傳遞給可變字符數組並執行就地反轉。
這顯然不會從底部讀取文件到頂部,它從頭到尾讀取並使用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的好教程的鏈接,我對fseek一無所知,所以我不能理解您的代碼:( – 2013-03-25 14:30:32
fseek將文件指針fp設置爲第二個和第三個參數指向的位置。嘗試此鏈接http://beej.us/guide/bgc/output/html/multipage/fseek.html – Deepu 2013-03-25 14:33:34
您可以開發自己的函數,從頭開始讀取,但從底部開始保存在數組中。
該函數將:
陣列它比每次讀
一次使用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;
}
[向後讀取文件?]的可能的副本(http://stackoverflow.com/questions/10813930/read-a-file-backwards) – 2013-03-25 14:01:25
等等,這不是重複的。另一個問題是逐行反向閱讀。 – mkb 2013-03-25 14:03:29
@mkb通過字符讀取文件字符以找到換行符或打印字符有什麼區別?至少它提供了一堆可能的解決方案,比如'fseek','內存映射文件... ... – 2013-03-25 14:05:25