お世話になります。
stringを逆順にして出力するプログラムについて分からないことがあります。
"Hello, 世界"というstringを逆順にして出力する時、
Go
1func Reverse(s string) string { 2 reversed := "" 3 if s == "" { 4 return "" 5 } 6 for i := len(s)-1; i >= 0; i-- { 7 reversed += string(s[i]) 8 } 9 return reversed 10}
これだと、
Expected: "界世 ,olleH" Actual: "\u008c\u0095ç\u0096¸ä ,olleH"
このようになってしまいます。
Go
1func Reverse(s string) string { 2 reversed := []byte("") 3 bytes := []byte(s) 4 if s == "" { 5 return "" 6 } 7 for i := len(bytes)-1; i >= 0; i-- { 8 reversed = append(reversed, bytes[i]) 9 } 10 return string(reversed) 11}
これだと、
Expected: "界世 ,olleH" Actual: "\x8c\x95疸\xe4 ,olleH"
上のように、byte配列にしても同じです。これはなぜなのでしょうか?
Go
1 2func Reverse(s string) string { 3 var output bytes.Buffer 4 runes := []rune(s) 5 fmt.Println(runes) 6 for i := len(runes) - 1; i >= 0; i-- { 7 output.WriteRune(runes[i]) 8 } 9 return output.String() 10}
こう書くことで正しい出力が得られるのですが、なぜruneを使う必要があるのですか?ご回答よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。