Self Print in C++

所謂的Self Print(自打印程序),就是指代碼編譯之後運行輸出的結果和原來的代碼一樣。
換言之,假設把編譯-運行-輸出作爲一個算子F,代碼作爲自變量s的話,Self Print 就是要尋找s,使得 F(s)=s

下面的程序要實現的是另外一種形式的Self Print,F(F(F(F(s))))=s

#include <cstdio>

int main()
{
    int Type=0;
    char *s1="#include <cstdio>/nint main()/n{/n/tint Type=1;/n/tchar *s1=%c%s%c;/n/tchar *s2=%c%s%c;/n/tchar *s3=%c%s%c;/n/tchar *s4=%c%s%c;/n/tchar *s[]={s1,s2,s3,s4};/n/tprintf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);/n}";
    char *s2="#include <cstdio>/nint main()/n{/n/tint Type=2;/n/tchar *s1=%c%s%c;/n/tchar *s2=%c%s%c;/n/tchar *s3=%c%s%c;/n/tchar *s4=%c%s%c;/n/tchar *s[]={s1,s2,s3,s4};/n/tprintf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);/n}";
    char *s3="#include <cstdio>/nint main()/n{/n/tint Type=3;/n/tchar *s1=%c%s%c;/n/tchar *s2=%c%s%c;/n/tchar *s3=%c%s%c;/n/tchar *s4=%c%s%c;/n/tchar *s[]={s1,s2,s3,s4};/n/tprintf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);/n}";
    char *s4="#include <cstdio>/nint main()/n{/n/tint Type=4;/n/tchar *s1=%c%s%c;/n/tchar *s2=%c%s%c;/n/tchar *s3=%c%s%c;/n/tchar *s4=%c%s%c;/n/tchar *s[]={s1,s2,s3,s4};/n/tprintf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);/n}";
    char *s[]={s1,s2,s3,s4};
    printf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);
}

發揮你的想象,看看你能實現出多少更pp,更有趣的Self Print程序呢?
發佈了40 篇原創文章 · 獲贊 5 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章