列印自身的程式

2021-04-07 07:55:26 字數 1519 閱讀 2743

閒來沒事,想起還有這樣乙個玩意,所以就做了,不知道符合要求不-,-

記得以前有個很短的,不過無法通過編譯=。=

// file name : print_self.cpp

// author : keakon

// create date : 2006/5/27

// last edited date : 2006/5/28

// description : print its own source code in stdout.

#include

//#include //rand()和srand()需要,但和已包含

#include

#include

#include

//#include //ostream_iterator需要,但已包含

#include

using namespace std;

string& getcpppath(string& path)

//若只傳遞const char**型的引數,則必須返回乙個string

//或乙個static的string&,這都是無謂的開銷

//若傳遞string&型的引數,則最好傳遞前就用char*初始化,因此無需其他引數

//返回string&是讓其可以巢狀在其他引數為string&或string的函式中使用

//這個函式做了5個假設:

//1是可執行檔案和源程式的檔名相同(不包括字尾名)

//2是路徑用「/」作為分隔符,可以改為「/」在unix和linux下使用

//3是將最後乙個「.」作為該可執行檔案字尾名的開始

//4是源程式路徑為「./」,即當前工程的資料夾下

//5是該源程式的字尾名為.cpp

//可見這個程式大部分都是判斷得出檔名,若允許給main()傳遞引數的話,就簡單多了

//若沒找到則index為最後的元素後面

//感覺返回npos很麻煩,為什麼不像stl中返回最後乙個後面的索引呢=。=

path.erase(index, path.size() - index); //去掉「.」之後的字元

const string path(".//");

//預設路徑名,因為在vc++6.0中,源程式在當前工程的資料夾下

//這個不加也行,因為預設就是當前資料夾

const string suffix(".cpp");

//預設字尾名,因為在vc++6.0中,c++源程式的字尾名為.cpp

path = path + path + suffix; //補充檔名的路徑和字尾名

return path;

} void print0(istream& in)

} void print1(istream& in)

//print0()也可改為用char處理

} void print2(istream& in)

//print1()也可以用copy來實現

} int main(int argc, char** agrv)

列印自身的程式

這篇文章發表於2004年第 csdn開發高手 第5期。本來是投稿給 程式設計師 雜誌的,但是給 調劑 到 csdn開發高手 上去了,是一大遺憾。csdn開發高手 目前已經停刊。include int main printf s,10,34,s,34 return 0 列印自身的程式 雜談 寫乙個程式...

列印自身的程式雜談

這篇文章發表於2004年第 csdn開發高手 第5期。本來是投稿給 程式設計師 雜誌的,但是給 調劑 到 csdn開發高手 上去了,是一大遺憾。csdn開發高手 目前已經停刊。include int main printf s,10,34,s,34 return 0 列印自身的程式 雜談 寫乙個程式...

有趣的發現 列印自身源程式

最近看 找規律的列印表 問題,就無意間看到了這個 列印自身源程式 問題,不禁感嘆有時候 真的神奇呀,學的越多就覺得自己知道的越少 作為真正的 quine 有一些約定 程式不能接受輸入或者是開啟檔案,因為那樣就可以直接輸入源 或者是把源 檔案直接開啟再重新列印出來,就沒有什麼意思了 同時,乙個完全空白...