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字符替换加密法。

相关内容

热门资讯

埃及塞得港省发生车祸致18人丧... 转自:新华网  新华社开罗2月19日电(记者徐皓夫 姚兵)埃及东北部塞得港省19日发生一起严重交通事...
特朗普会见印尼总统普拉博沃签经...   白宫发表声明称,美国总统特朗普周四在华盛顿特区会见了印尼总统普拉博沃·苏比延多。  两位领导人签...
纽约叫停无人驾驶出租车扩张计划   Waymo将其自动驾驶出租车引入纽约州的重大机会暂时受挫。  纽约州州长凯西·霍楚尔撤回了一项提...
AI技术突破与行业竞争加剧,字... 经济观察网 近一周(2026年2月13日至2月19日),互联网科技领域热点集中在AI技术突破、企业战...
莫霍克工业股价异动,财报与行业... 经济观察网 近期股价波动 根据公开报道,莫霍克工业公司(MHK.US)在2026年1月初出现显著股价...