閒來沒事,想起還有這樣乙個玩意,所以就做了,不知道符合要求不-,-
記得以前有個很短的,不過無法通過編譯=。=
// 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 有一些約定 程式不能接受輸入或者是開啟檔案,因為那樣就可以直接輸入源 或者是把源 檔案直接開啟再重新列印出來,就沒有什麼意思了 同時,乙個完全空白...