我在使用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 關注
- 168 瀏覽
添加回答
舉報
0/150
提交
取消