Go语言学习笔记-A Tour of Go 练习笔记-rot13Reader
创始人
2024-03-08 02:08:05

Exercise: rot13Reader

练习题目:

A common pattern is an io.Reader that wraps another io.Reader, modifying the stream in some way.

For example, the gzip.NewReader function takes an io.Reader (a stream of compressed data) and returns a *gzip.Reader that also implements io.Reader (a stream of the decompressed data).

Implement a rot13Reader that implements io.Reader and reads from an io.Reader, modifying the stream by applying the rot13 substitution cipher to all alphabetical characters.

The rot13Reader type is provided for you. Make it an io.Reader by implementing its Read method.

练习程序:

package mainimport ("io""os""strings"
)type rot13Reader struct {r io.Reader
}func rot13(x byte) byte {switch {case x >= 65 && x <= 77:fallthroughcase x >= 97 && x <= 109:x = x + 13case x >= 78 && x <= 90:fallthroughcase x >= 110 && x <= 122:x = x - 13}return x
}func (rot rot13Reader) Read(a []byte) (int, error) {n, err := rot.r.Read(a)for key, value := range(a) {a[key] = rot13(value)}return n, err
}func main() {s := strings.NewReader("Lbh penpxrq gur pbqr!")r := rot13Reader{s}io.Copy(os.Stdout, &r)
}

运行结果:

You cracked the code!

学习笔记:

该题目是对于GO中Read方法的进阶练习,GO中常用的一种方式是用一个io.Reader去封装另一个io.Reader,这样可以实现很多功能,比如可以先通过里层的io.Reader从加密的文本中先读取加密字符,然后在外层的io.Reader的Read方法中实现解密并输出,这样就完成了一种直接读取解密文本的能力。本题目就是类似的场景,使用的加密算法是比较简单的ROT13字符替换加密法。

相关内容

热门资讯

重大通报作弊器!乐乐上海麻将a... 重大通报作弊器!乐乐上海麻将ai智能透视辅助插件,乐乐上海麻将本来存在有外挂(有辅助挂方略)1、很好...
分享给玩家透视挂!家乡大贰ai... 分享给玩家透视挂!家乡大贰ai智能透视辅助工具,家乡大贰其实真的有外挂(有辅助挂细节)家乡大贰破解侠...
科普攻略开挂!英豪娱乐城ai智... 科普攻略开挂!英豪娱乐城ai智能透视辅助教程,英豪娱乐城好像真的是有外挂(有辅助挂头条)1、英豪娱乐...
总算了解辅助器!和悦游戏ai智... 总算了解辅助器!和悦游戏ai智能透视辅助教程,和悦游戏确实是真的有外挂(竟然有辅助挂)暗藏猫腻,小编...
揭秘关于辅助器!九九麻将ai智... 揭秘关于辅助器!九九麻将ai智能透视辅助技巧,九九麻将一贯是有外挂(有辅助挂方略)1、用户打开应用后...