2013-10-07 11 views
19

http://play.golang.org/p/ZsALO8oF3WGo, Golang: stringa di accesso come valore di carattere

voglio attraversare una stringa e restituire i valori dei caratteri. Come faccio a non restituire i valori numerici per ogni lettera e restituire i caratteri reali?

Ora sto ottenendo questo

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

mio output desiderato sarebbe

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) 
    } 
} 

Grazie,

risposta

41

For statements

Per un valore di stringa, il "range" itera clausola sul codice Unicode punti nella stringa partire dall'indice byte 0. successive iterazioni , il valore dell'indice sarà l'indice del primo byte di punti codificati UTF-8 successivi nella stringa e il secondo valore , di tipo rune, sarà il valore del punto corrispondente del codice . Se l'iterazione incontra una sequenza UTF-8 non valida, il secondo valore di sarà 0xFFFD, il carattere di sostituzione Unicode e l'iterazione successiva farà avanzare un singolo byte nella stringa.

Per esempio,

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)) 
    } 
} 

uscita:

H 
e 
l 
l 
o 

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

Il modo in cui si effettua l'iterazione i caratteri della stringa è praticabile (anche se str [i] ed elem sono il duplicativo l'uno dell'altro). Hai i dati giusti.

Per visualizzarlo correttamente, è necessario eseguire l'output con la formattazione corretta (ovvero interpretato come carattere unicode anziché int).

Cambio:

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

a:

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

%c è il carattere rappresentato dal corrispondente Unicode punto di codice per doc Printf: http://golang.org/pkg/fmt/

4

pacchetto principale Uso Printf per indicare che si desidera stampare caratteri.

import "fmt" 

func main() { 

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

} 
Problemi correlati