Bait dan rentetan Golang

WBOY
Lepaskan: 2024-02-09 09:00:29
ke hadapan
873 orang telah melayarinya

Golang 字节与字符串

editor php Youzi akan membawa anda meneroka bait dan rentetan di Golang secara mendalam. Di Golang, bait dan rentetan ialah jenis data biasa, tetapi terdapat beberapa perbezaan halus dan kaedah penukaran antara mereka. Memahami perbezaan dan kaedah penukaran ini akan membantu anda memproses data anda dengan lebih baik dan mengoptimumkan prestasi program. Artikel ini akan memperkenalkan konsep bait dan rentetan, kaedah penukaran bersama dan senario penggunaannya dalam aplikasi praktikal, membantu anda memahami dan menggunakan bait dan rentetan dengan lebih baik dalam Golang. Mari kita meneroka bersama-sama!

Kandungan soalan

Saya cuba mencari elemen sepunya antara dua rentetan yang sama panjang dalam golang.

Elemen ditemui, tetapi perwakilan rentetan nampaknya mengandungi nilai bait juga. Bagaimana saya boleh menyingkirkannya?

func main() {
    println(fmt.printf("common element = %s",
        findcommonelement("abcdefghi", "ijklmnopq")))
}

func findcommonelement(firstelements, secondelements string) string {
    elementsinfirstgroup := make(map[string]bool)
    for _, charvalue := range firstelements {
        elementsinfirstgroup[string(charvalue)] = true
    }
    for index := range firstelements {
        if _, ok := elementsinfirstgroup[string(secondelements[index])]; ok {
            matchingelem := secondelements[index]
            println(string(matchingelem))
            return string(matchingelem)
        }
    }

    panicmessage := fmt.sprintf("could not find a common item between %s and %s", firstelements, secondelements)
    panic(panicmessage)
}
Salin selepas log masuk

Output yang saya dapat ialah

i
common element = i18 (0x0,0x0)
Salin selepas log masuk

Kod di sini

Penyelesaian

Anda harus menggunakan fmt.sprintf 而不是 fmt.printf.

Dan elakkan menggunakan terbina dalam println,而是使用 fmt.println.

https://pkg.go.dev/[emel dilindungi]#printf

func printf(format string, a ...any) (n int, err error)
Salin selepas log masuk

printf memformat dan menulis kepada output standard mengikut penentu format. Ia mengembalikan bilangan bait yang ditulis dan sebarang ralat penulisan yang dihadapi.

Oleh itu 18 (0x0,0x0)...

    Bilangan aksara dalam
  • 18 是字符串 "common element = i".
  • (0x0,0x0) 是由 println 打印的 nil Nilai ralat.

Lebih penting lagi, bagaimanapun, algoritma anda adalah cacat kerana ia mencampurkan bait dengan rune. Apabila anda melakukannya range 时,迭代变量 charvalue 将被分配一个 rune,它可能是多字节的。但是,当您索引字符串(例如 secondelements[index])时,其结果始终是单个 byte pada rentetan. Oleh itu, panik atau omong kosong (bait tidak sah) pasti akan menjadi hasil daripada fungsi anda. Lihat Contoh.

Anda mungkin mendapat hasil yang lebih baik dengan melakukan perkara berikut:

func findCommonElement(firstElements, secondElements string) string {
    second := map[rune]bool{}
    for _, r := range secondElements {
        second[r] = true
    }

    for _, r := range firstElements {
        if second[r] {
            fmt.Println(string(r))
            return string(r)
        }
    }

    panic("...")
}
Salin selepas log masuk

https://www.php.cn/link/dbdc69ea6ccbdea0ca2d796e1af24ebf

Atas ialah kandungan terperinci Bait dan rentetan Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!