今天看到 大虾 88250的灰色天空 在博客中提到“Hello world的N种写法”实在把我惊了一番,看来基本功还要好好联系啊。这里对其中据说特别外星人的方法进行分析。
原文:
10. 外星人说的“Hello world!”
好了,这个“Hello world!”是最匪夷所思的一个了!不过它并没有涉及任何复杂的C/C++语言特性,只是看起来有点酷。你能看懂外星人在说什么不?
#include <stdio.h>
void alien_say(char * p)
{
while (putchar(*(p += *(p + 1) - *p)));
}
int main()
{
return alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0;
}
分析:
貌似混乱的字符串“BETHO! Altec oh liryom(a loadjudas!) dowd.”,其实特意安排!下面从俺从小菜鸟的角度来来分析这个字符串的用途:
void alien_say(char * p)
{
while (putchar(*(p += *(p + 1) - *p)));
}
1、从函数着手,putchar()在每次接受一个字符后while循环继续直到putchar()为假!
2、注意分清putchar里面的表达式,提取出来暂且命名为 lxrm ,令 char lxrm = *( p += *(p+1) - *p ) ;
3、下面拆分函数:alien_say(char * p)。 很明显,该表达式是按照lxrm这个规则提取原始字符串p中的字符,
其规律就是:每次取当前指针所指元素紧跟的元素,将后者与前者的ascii差值加到前者的指针上,即将当前指针
进行位移,以达到取特定字符的目的。那么这个运算完成后便生成了所需字符串:Hello world!
4、推广,那么我们就可以来制造一下这个特殊字符串,怎么越来越貌似加密算法了,只不过大虾 88250的灰色天空 写的是解密算法,呵呵。
上班了,有空把它整理出来吧,嘿嘿~~~