गोलंग स्ट्रिंग में वर्णों को कैसे अनुक्रमणित किया जाए?


100

69 के बजाय "ई" आउटपुट कैसे प्राप्त करें?

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}

क्या गोलंग को चार बाइट और इसके विपरीत में बदलने का कार्य है?

जवाबों:


149

व्याख्या की गई स्ट्रिंग शाब्दिक दोहरे वर्णों के बीच वर्ण अनुक्रम हैं "" (संभवतः मल्टी-बाइट) यूटीएफ -8 व्यक्तिगत पात्रों के एन्कोडिंग का उपयोग करते हुए। UTF-8 में, ASCII वर्ण पहले 128 यूनिकोड वर्णों के अनुरूप एकल-बाइट हैं। स्ट्रिंग्स बाइट्स के स्लाइस की तरह व्यवहार करते हैं। एक रन एक यूनीकोड ​​कोड बिंदु की पहचान करने वाला एक पूर्णांक मूल्य है। इसलिए,

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))              // ASCII only
    fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8
    fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
}

आउटपुट:

e
e
界

पढ़ें:

भाषा विशिष्टता प्रोग्रामिंग जाओ पर अनुभाग रूपांतरण

गो ब्लॉग: गो में स्ट्रिंग्स, बाइट्स, रन और कैरेक्टर


19

इस बारे में कैसे ?

fmt.Printf("%c","HELLO"[1])

जैसा कि पीटर बताते हैं, केवल ASCII से अधिक के लिए अनुमति देने के लिए:

fmt.Printf("%c", []rune("HELLO")[1])

10

स्लाइसिंग के माध्यम से भी किया जा सकता है

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1:2])
}

नोट: यह समाधान केवल ASCII वर्णों के लिए काम करता है।


यह केवल एक-बाइट एन्कोडिंग के साथ काम करता है, कोशिश करें "हैलो"[:1]कि यह आपको v
vladkras

@vladkras आप सही हैं। यह केवल ASCII के साथ काम करता है। UTF-8 के लिए, अनुमोदित उत्तर पर एक नज़र डालें। मैं इस जानकारी के साथ समाधान भी संपादित करूंगा।
समकित जैन

7

गो में वास्तव में चरित्र का प्रकार नहीं है। बाइट का उपयोग अक्सर ASCII वर्णों के लिए किया जाता है, और रूनिक का उपयोग यूनिकोड वर्णों के लिए किया जाता है, लेकिन वे दोनों पूर्णांक प्रकारों (uint8 और int32) के लिए केवल उपनाम हैं। इसलिए यदि आप संख्या के बजाय उन्हें वर्णों के रूप में मुद्रित करने के लिए बाध्य करना चाहते हैं, तो आपको उपयोग करने की आवश्यकता है Printf("%c", x)%cप्रारूप विनिर्देश किसी भी पूर्णांक प्रकार के लिए काम करता है।


5

आप इसे स्ट्रिंग के साथ टाइपकास्ट करने का भी प्रयास कर सकते हैं।

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))
}

4

एक स्ट्रिंग के रूप में एक चार की व्याख्या करने का सामान्य समाधान है string("HELLO"[1])

रिच का समाधान भी निश्चित रूप से काम करता है।


0

उनकी अनुक्रमणिका द्वारा सुधारकों को प्राप्त करने के लिए यह प्रयास करें

package main

import (
      "fmt"
      "strings"
)

func main() {
   str := strings.Split("HELLO","")
    fmt.Print(str[1])
}

0

स्ट्रिंग वर्ण चलाए जाते हैं, इसलिए उन्हें मुद्रित करने के लिए, आपको उन्हें स्ट्रिंग में वापस करना होगा।

fmt.Print(string("HELLO"[1]))


-3

एक स्ट्रिंग में एक चरित्र को अलग करने के लिए एक और समाधान

package main
import "fmt"

   func main() {
        var word string = "ZbjTS"

       // P R I N T 
       fmt.Println(word)
       yo := string([]rune(word)[0])
       fmt.Println(yo)

       //I N D E X 
       x :=0
       for x < len(word){
           yo := string([]rune(word)[x])
           fmt.Println(yo)
           x+=1
       }

}

स्ट्रिंग सरणियों के लिए भी:

fmt.Println(string([]rune(sArray[0])[0]))

// = टिप्पणी की गई पंक्ति


11
सच में, सच बुरा कोड यूनिकोड इनपुट (के साथ आतंक होगा कि len("cafés")> len([]rune("cafés"))और के लिए प्रत्येक यात्रा, पर स्ट्रिंग reconvert सकता है ओ (n²)। बस कर for _, r := range word { fmt.Printf("%c", r) }। क्या तुम सच में एक सूचकांक के साथ पाश करना चाहता है तो for x := 0; x < limit; x++कृपया जवाब देने से पहले भाषा की मूल बातें सीख प्रश्न।
डेव सी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.