“外星人”字符串生成算法研究

    今天看到 大虾 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的灰色天空 写的是解密算法,呵呵。

     上班了,有空把它整理出来吧,嘿嘿~~~


转载于:https://my.oschina.net/lxrm/blog/711

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值