我在使用tour.golang.org/methods/23时遇到了一些问题package mainimport ( "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!
3 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
'A'
(从数字上来说)是 65。字母表中越深的字母越多,最多可达'Z'
90。
'a'
(从数字上来说)是 97。字母表中越深的字母越多,最多为'z'
122。
(不要问我为什么要记住一些 ASCII。我确实必须查找这些z
值。:-))
练习 1:如果s[i]
是'a'
,即 97,然后将其 rot-13 得到'n'
(110),这是否大于 65?当你听到第二个 if
陈述时会发生什么?
练习2:如果s[i]
是'_'
(十进制95),这里会发生什么?
(你不断改变你的问题,所以现在这些练习有点没有实际意义。)
白衣非少年
TA贡献1155条经验 获得超0个赞
如果您直接使用字母的 ascii 值,则必须对它们进行偏移。大写 AZ 的 ascii 值是 65-90(含),小写 az 的 ascii 值是 97-122(含)。
- 3 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消