গোলং স্ট্রিংয়ে অক্ষরগুলি কীভাবে সূচক করবেন?


101

কিভাবে 69 এর পরিবর্তে "ই" আউটপুট পাবেন?

package main

import "fmt"

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

কোনও চরকে বাইটে এবং তদ্বিপরীত রূপান্তর করতে গোলংয়ের কাজ আছে কি?

উত্তর:


150

বর্ণিত স্ট্রিং লিটারালগুলি স্বতন্ত্র অক্ষরের "(সম্ভবত বহু-বাইট) ইউটিএফ -8 এনকোডিং ব্যবহার করে" "ডাবল উদ্ধৃতিগুলির মধ্যে অক্ষর ক্রম হয়। ইউটিএফ -8 এ, এএসসিআইআই অক্ষরগুলি প্রথম 128 ইউনিকোড অক্ষরের সাথে সম্পর্কিত একক বাইট te স্ট্রিংগুলি বাইটের স্লাইসের মতো আচরণ করে। একটি রুনি একটি ইউনিকোড কোড পয়েন্ট সনাক্ত করে একটি পূর্ণসংখ্যা মান। অতএব,

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]করে
ভ্লাদক্রাস ২

আপনি ভাল আছেন এটি কেবল এএসসিআইআইয়ের সাথে কাজ করে। ইউটিএফ -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++দয়া করে উত্তর দেওয়ার আগে একটি ভাষা বুনিয়াদি শিখতে প্রশ্নসমূহ।
ডেভ সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.