我在tour.golang.org/methods/23
遇到了一些麻烦package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func (r rot13Reader) Read(s []byte) (int, error) {
a, e := r.r.Read(s)
for i := 0; i < a; i++ {
if(s[i] >= 'a') {
s[i] = ((s[i] - 'a') + 13) % 26 + 'a'
}
if(s[i] >= 'A') {
s[i] = ((s[i] - 'A') + 13) % 26 + 'A'
}
}
return a, e
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
我要添加然后修改,但考虑到小写和大写的ASCII码之间的差异后,结果看起来并不正确
YHN VKTVDXW MAX VHWX!
答案 0 :(得分:1)
如果直接使用字母的ascii值,则必须抵消它们。大写字母A-Z的ascii值为65-90(含),小写字母a-z的ascii值为97-122(含)。
答案 1 :(得分:1)
'A'
(从数字上讲)是65。字母中较深的字母会增加,直到'Z'
即90。
'a'
(从数字上来说)是97。字母中更深的字母增加,直到'z'
,即122。
(不要问为什么我要记住一些ASCII。我确实必须查找z
值。:-))
练习1:如果s[i]
是'a'
,即97,而您将其腐烂成'n'
(110),是否大于65?当您进入 second if
语句时会发生什么?
练习2:如果s[i]
是'_'
(十进制95),那么会发生什么?
(您一直在更改问题,所以现在这些练习尚无定论。)
答案 2 :(得分:0)
确保只通过固定字母检查的范围来做字母
在“ a”和“ z”之间以及在“ A”和“ Z”之间
第二个Z需要大写时为小写