package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func (rot rot13Reader) Read(b []byte) (n int, err error){
left:=len(b)
for{
length,status:=rot.r.Read(b[len(b)-left:])
for idx,val := range b[len(b)-left:len(b)-left+length]{
if val>='A' && val<='M' || val>='a' && val<='m'{
b[idx]=val+13
}else{
b[idx]=val-13
}
}
left-=length
if status!=nil{
return len(b)-left,status
}
if left==0{
return len(b),nil
}
}
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
rot13Reader
最新推荐文章于 2024-07-01 10:24:10 发布