2013-10-07 7 views
19

http://play.golang.org/p/ZsALO8oF3Wजाओ, Golang: चरित्र मूल्य

मैं एक स्ट्रिंग पार और चरित्र मान करना चाहते हैं पहुँच स्ट्रिंग। मैं प्रत्येक अक्षर के लिए संख्यात्मक मान वापस कैसे नहीं कर सकता, और वास्तविक पात्रों को वापस कर सकता हूं?

अब मैं इस

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

धन्यवाद,

उत्तर

41

For statements

एक स्ट्रिंग मान के लिए, यूनिकोड कोड पर "सीमा" खंड दोहराता स्ट्रिंग में अंक बाइट सूचकांक 0. लगातार पुनरावृत्तियों पर पर शुरू, सूचकांक मूल्य हो जाएगा स्ट्रिंग में लगातार यूटीएफ -8-एन्कोडेड कोड पॉइंट्स के पहले बाइट की अनुक्रमणिका, और दूसरा मान, रन रन के मान, संबंधित कोड बिंदु का मान होगा। यदि पुनरावृत्ति में एक अवैध यूटीएफ -8 अनुक्रम का सामना करना पड़ता है, तो दूसरा मान 0xFFFD होगा, यूनिकोड प्रतिस्थापन चरित्र, और अगला पुनरावृत्ति स्ट्रिंग में एक बाइट अग्रिम करेगा।

उदाहरण के लिए

,

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 के बजाय एक यूनिकोड वर्ण के रूप में व्याख्या की गई है)।

बदलें:

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 डॉक का प्रतिनिधित्व करती है यह इंगित करने के लिए कि आप अक्षर मुद्रित करना चाहते हैं।

import "fmt" 

func main() { 

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

}