登录
首页 >  Golang >  Go问答

Unicode标准在GO编程语言中的应用

来源:stackoverflow

时间:2024-03-06 18:09:23 440浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《Unicode标准在GO编程语言中的应用》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我有一个字符串,其中包含通过 unicode 实现的从红心 a 到红心 10 的卡片(练习需要使用字符串,因此不需要数组或切片) 给定一个数字 n,我必须从该字符串中提取 n 张卡片。如果使用 for-range 得到的位数少于我需要的位数,我该怎么做?

package main

import (
    "fmt"
    "math/rand"
    "strconv"
    "strings"
    "time"
)

func main() {
    var n int
    var deck string

    rand.Seed(int64(time.Now().Nanosecond()))

    n = readNumber()
    deck = deckGenerator()
    drawCards(deck, n)

}

func readNumber() (n int) {
    for n <= 0 || n >= 10 {
        fmt.Print("Enter number between 1 and 9: ")
        fmt.Scan(&n)
    }
    return n
}

func deckGenerator() (deck string) {
    for i := 0; i < 10; i++ {
        deck += strconv.Itoa('\U0001F0B1' + i)
    }
    return deck
}

func drawCards(deck string, n int) {
    for i := 0; i < n; i++ {
        cardPulledOut, deck2 := drawCard(deck)
        fmt.Println("Pulled out the card", cardPulledOut, "- Cards left in the deck:", deck2)
    }
}

func drawCard(deck string) (cardPulledOut rune, deck2 string) {
    for true {
        card := rune(('\U0001F0B1') + rand.Intn(10)) //random number between 0 and 9 inclusive

        for _, v := range deck {
            fmt.Println(v, card)
            /*
                output: (infinity loop)
                ...
                49 127156
                53 127156
                56 127156
                ...
            */
            if v == card {
                deck = strings.Replace(deck, string(card), "", 1)
                return cardPulledOut, deck2
            }
        }
    }
    return
}

正确答案


您的人口函数有一个错误:

func deckgenerator() (deck string) {
    for i := 0; i < 10; i++ {
        // deck += strconv.itoa('\u0001f0b1' + i) // converts integers to their string equivalent e.g. "127156"

        deck += string(rune('\u0001f0b1' + i))    // fix
    }
    return deck
}

https://go.dev/play/p/E3sVRZK4exh

为需要的人提供正确的代码:

package main

import (
    "fmt"
    "math/rand"
    "strings"
    "time"
)

func main() {
    var n int
    var deck string

    rand.Seed(int64(time.Now().Nanosecond()))

    n = readNumber()
    deck = deckGenerator()
    drawCards(deck, n)

}

func readNumber() (n int) {
    for n <= 0 || n >= 10 {
        fmt.Print("Enter number between 1 and 9: ")
        fmt.Scan(&n)
    }
    return n
}

func deckGenerator() (deck string) {
    for i := 0; i < 10; i++ {
        //deck += strconv.Itoa('\U0001F0B1' + i)
        deck += string(rune('\U0001F0B1' + i))
    }
    return deck
}

func drawCards(deck string, n int) {
    var cardPulledOut rune
    for i := 0; i < n; i++ {
        cardPulledOut, deck = drawCard(deck)
        fmt.Println("Pulled out the card", string(rune(cardPulledOut)), "- Cards left in the deck:", deck)
    }
}

func drawCard(deck string) (card rune, deck2 string) {
    for true {
        card = rune(('\U0001F0B1') + rand.Intn(10)) //random number between 0 and 9 inclusive

        for _, v := range deck {
            //fmt.Println(v, card)
            if v == card {
                deck2 = strings.Replace(deck, string(card), "", 1)
                return card, deck2
            }
        }
    }
    return
}

今天关于《Unicode标准在GO编程语言中的应用》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>