Подтвердить что ты не робот

Go, Golang: строка доступа как значение символа

http://play.golang.org/p/ZsALO8oF3W

Я хочу пересечь строку и вернуть значения символов. Как я могу, не возвращать числовые значения для каждой буквы и возвращать действительные символы?

Теперь я получаю это

 0 72 72
 1 101 101
 2 108 108
 3 108 108
 4 111 111

Мой желаемый результат был бы

 0 h h
 1 e e
 2 l l
 3 l l
 4 o o

 package main

 import "fmt"

 func main() {

    str := "Hello"
    for i, elem := range str {
        fmt.Println(i, str[i], elem)
    }

    for elem := range str {
        fmt.Println(elem)
    }   
 }

Спасибо,

4b9b3361

Ответ 1

Для утверждений

Для строкового значения предложение "range" выполняет итерацию по коду Unicode точек в строке, начинающейся с индекса байта 0. На последовательном итераций, значение индекса будет индексом первого байта последовательные кодовые точки с кодировкой UTF-8 в строке, а вторая value, типа rune, будет значением соответствующего кода точка. Если итерация встречает недействительную последовательность UTF-8, второе значение будет 0xFFFD, символ замены Unicode и следующая итерация будет продвигать один байт в строке.

Например,

package main

import "fmt"

func main() {
    str := "Hello"
    for _, r := range str {
        c := string(r)
        fmt.Println(c)
    }
    fmt.Println()
    for i, r := range str {
        fmt.Println(i, r, string(r))
    }
}

Вывод:

H
e
l
l
o

0 72 H
1 101 e
2 108 l
3 108 l
4 111 o

Ответ 2

основной пакет Используйте Printf, чтобы указать, что вы хотите печатать символы.

import "fmt"

func main() {

        str := "Hello"
        for i, elem := range str {
                fmt.Printf("%d %c %c\n", i, str[i], elem)
        }

}

Ответ 3

То, как вы выполняете итерации над символами в строке, является выполнимым (хотя str [i] и elem являются дублирующими друг друга). У вас есть правильные данные.

Чтобы отобразить его правильно, вам просто нужно выводить с правильным форматированием (т.е. интерпретироваться как символ Unicode, а не int).

Изменить:

fmt.Println(i, str[i], elem)

в

fmt.Printf("%d %c %c\n", i, str[i], elem)

%c - это символ, представленный соответствующей кодовой точкой Юникода на документ Printf: http://golang.org/pkg/fmt/