Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bait dan rentetan Golang

Bait dan rentetan Golang

WBOY
WBOYke hadapan
2024-02-09 09:00:29844semak imbas

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

Output yang saya dapat ialah

i
common element = i18 (0x0,0x0)

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)

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("...")
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam