【发布时间】:2021-09-12 16:57:33
【问题描述】:
我正在尝试解决围棋练习rot13Reader:
这是我的解决方案:
package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func rot13(x byte) byte {
switch {
case x >= 65 && x <= 77:
fallthrough
case x >= 97 && x <= 109:
x = x + 13
case x >= 78 && x <= 90:
fallthrough
case x >= 110 && x >= 122:
x = x - 13
}
return x
}
func (r13 *rot13Reader) Read(b []byte) (int, error) {
n, err := r13.r.Read(b)
for i := 0; i <= n; i++ {
b[i] = rot13(b[i])
}
return n, err
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
它返回You prnpxrq tur poqr!,这意味着只有“Lbh penpxrq gur pbqr!”的第一个单词已破裂。我怎样才能破解整个句子?
【问题讨论】:
-
有人能解释一下为什么 Read 函数的第一行需要赋值吗?我使用 for range 循环遍历字节数组,然后尝试返回 len(b), nil 但它给了我一个超时错误。我还在做 r13.r.Read(b),只是没有在任何地方分配它。很困惑有什么区别。
标签: go