按行逆向複製乙個檔案

2021-06-01 02:53:00 字數 2437 閱讀 6871

這是乙個面試題,要求把類似下面的乙個檔案(a.txt)的行逆向複製到另乙個檔案(anew.txt)。如下,

a.txt:

------begin------ab

cdef

------end------

anew.txt

------end------fe

dcba

------begin------

下面是我寫的程式,利用了遞迴演算法。演算法描述在**後面

//c program

#include #include #include #define siz 1024

void reverse_line_copy(file *fp_in, file *fp_out)

; int first_line = (ftell(fp_in)==0l) ? 1 : 0; //the first_line

int last_line = 0; //the last_line

fgets(buf, siz, fp_in); //read a line to buf

last_line = feof(fp_in)!=0;

reverse_line_copy(fp_in, fp_out); //遞迴

if (first_line && !last_line && strlen(buf)!=0) //first_line

buf[strlen(buf)-1] = '\0';

else if (last_line && !first_line) //last_line

buf[strlen(buf)] = '\n';

fputs(buf, fp_out); }}

int main(void)

if ((file_out=fopen("anew.txt", "w+"))==null)

reverse_line_copy(file_in, file_out);

fclose(file_in);

fclose(file_out);

return 0;

}

演算法描述:

(1)本演算法的主體是函式reverse_line_copy

(2)遞迴過程是:現在我要把1~n行字元逆向複製到別的檔案中,那麼我假定:如果能先把2~n行逆向複製到別的檔案中,然後再把第一行複製到檔案後,那麼這個任務就算完成了。同理,逆向複製2~n行用的辦法正是最開始的演算法,從而形成遞迴呼叫。

(3)reverser_line_copy函式,先讀取第一行,檔案指標fp_in隨即跳到第二行,然後遞迴呼叫reverser_line_copy函式,最後把第一行複製進檔案中。完成!

依據這個遞迴演算法,也可以用c++程式實現,稍微簡單一點!雖說程式簡單,但下面這個程式也揭示了乙個大家不太關注的細節。

//c++ program

#include #include #include #include using namespace std;

void reverse_line_copy(ifstream &inf, ofstream &outf);

int main()

ofstream file_out("anew.txt");

if (!file_out)

reverse_line_copy(file_in, file_out);

file_in.close();

file_out.close();

return 0;

}void reverse_line_copy(ifstream &inf, ofstream &outf)

}

上面這段c++程式之所以簡單一些,是因為:

c程式裡的讀一行的函式fgets()返回的字串裡包含行末的換行符;而c++程式裡的getline()不返回行末的換行符。

又鑑於c++提供的方便的流操作和容量可擴充套件的容器,下面又提供了乙個c++程式的順序實現演算法。

//c++ program

#include #include #include #include using namespace std;

int main()

dequefile_deque;

string aline;

while (file_in.good())

file_in.close();

ofstream file_out("anew.txt");

if (!file_out)

while(!file_deque.empty())

file_out.close();

return 0;

}

複製乙個檔案或者從乙個資源獲取乙個檔案並複製

複製乙個檔案或者從乙個資源獲取乙個檔案並複製 param unknown type source 乙個檔名或者乙個資源,如 source param unknown type fname 另存為的檔名 function copy from source source,fname fwrite fil...

乙個簡單的逆向

首先執行程式觀察程式的提示資訊 可以看到程式首先 乙個字串提示 隨便輸乙個 出現另乙個字串u r wrong 然後 od引導程式,字串查詢 看到提示的字串,單擊進入f2 下段點,執行程式,斷在 單步 跟下來 讀取字元函式getch 隨便輸入乙個假碼,eax 的值正是輸入的假碼ascii的碼,可以看出...

讀tfrecords檔案,乙個乙個讀 按批次讀

import tensorflow as tf import matplotlib.pyplot as plt tfrecords file home lw workspace microvideolstm tfrecorddata videoframe.tfrecords filename que...