这个 rot13 密码有什么问题?

我在使用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!


弑天下
浏览 119回答 3
3回答

神不在的星期二

'A'(从数字上来说)是 65。字母表中越深的字母越多,最多可达'Z'90。'a'(从数字上来说)是 97。字母表中越深的字母越多,最多为'z'122。(不要问我为什么要记住一些 ASCII。我确实必须查找这些z值。:-))练习 1:如果s[i]是'a',即 97,然后将其 rot-13 得到'n'(110),这是否大于 65?当你听到第二个&nbsp;if陈述时会发生什么?练习2:如果s[i]是'_'(十进制95),这里会发生什么?(你不断改变你的问题,所以现在这些练习有点没有实际意义。)

白衣非少年

如果您直接使用字母的 ascii 值,则必须对它们进行偏移。大写 AZ 的 ascii 值是 65-90(含),小写 az 的 ascii 值是 97-122(含)。

慕斯王

通过修复字母检查的界限,确保只处理字母在“a”和“z”之间以及“A”和“Z”之间当你的第二个 Z 需要大写时,它是小写的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go