#string #go #reverse
#строка #Вперед #обратный
Вопрос:
Мне просто интересно, почему эти азиатские символы в этой строке не отображаются, когда я переворачиваю и печатаю отдельные символы в строке.
package main
import "fmt"
func main() {
a := "The quick brown 狐 jumped over the lazy 犬"
var lenght int = len(a) - 1
for ; lenght > -1; lenght-- {
fmt.Printf("%c", a[lenght])
}
fmt.Println()
}
Комментарии:
1. Многобайтовые символы.
2. @MattBall ты уверен? Я думаю, что go использует строки, состоящие из рун.
3. @EricUrban Я не особенно знаком с Go, но я уверен, что это проблема. Индексирование строки обращается к отдельным байтам, а не к символам.
Ответ №1:
Вы обращаетесь к массиву строк по байту, а не по «логическому символу», чтобы лучше понять, что этот пример сначала разбивает строку как массив рун, а затем печатает руну в обратном направлении.
http://play.golang.org/p/bzbo7k6WZT
package main
import "fmt"
func main() {
msg := "The quick brown 狐 jumped over the lazy 犬"
elements := make([]rune, 0)
for _, rune := range msg {
elements = append(elements, rune)
}
for i := len(elements) - 1; i >= 0; i-- {
fmt.Println(string(elements[i]))
}
}
Более короткая версия: http://play.golang.org/p/PYsduB4Rgq
package main
import "fmt"
func main() {
msg := "The quick brown 狐 jumped over the lazy 犬"
elements := []rune(msg)
for i := len(elements) - 1; i >= 0; i-- {
fmt.Println(string(elements[i]))
}
}