2013-10-07 9 views
19

http://play.golang.org/p/ZsALO8oF3Wゴー、Golang:文字値としてアクセス文字列

私は、文字列を横断し、文字値を返したいです。どのようにして、各文字ごとに数値を返さず、実際の文字を返すのですか?

今、私は私の所望の出力が

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

だろうこの

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

を取得していますが、文字列の文字を反復処理しているおかげで、

答えて

41

For statements

、連続 反復のバイトインデックス0から始まる文字列内のUnicodeコード上「範囲」句反復 点を、インデックス値となり文字列の 連続したUTF-8エンコードされたコードポイントの最初のバイトのインデックスと、タイプ2の の値は、対応するコード ポイントの値になります。反復で無効なUTF-8シーケンスが検出されると、 の第2の値は0xFFFD、Unicodeの置換文字、 は次の反復で文字列の1バイトだけ前進します。例えば

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 
1

方法は、STRが(実行可能です[i]とelemは互いに重複している)。あなたは正しいデータを持っています。

正しく表示されるようにするには、正しい書式で出力するだけです(つまり、intではなくUnicode文字として解釈する必要があります)。

変更:へ

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

http://golang.org/pkg/fmt/

4

パッケージメイン 利用のprintf:

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

%cのprintfドキュメントごとに対応するUnicodeコードポイントで表現される文字です文字を印刷したいことを示します。文字列値の

import "fmt" 

func main() { 

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

} 
関連する問題