第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Go 中的字符串整數(shù)中獲取整數(shù)片段?

從 Go 中的字符串整數(shù)中獲取整數(shù)片段?

Go
慕容3067478 2023-06-01 14:39:21
我想將表示整數(shù)的字符串轉(zhuǎn)換為包含構(gòu)成初始字符串的每個整數(shù)的切片。游樂場鏈接我試過使用Atoi()中的函數(shù)strconv,它給出了“不能使用 toCheck[i](字節(jié)類型)作為 strconv.Atoi 參數(shù)中的類型字符串”。我也嘗試過 int() 轉(zhuǎn)換,但它給了我我認為是 ASCII 值的值——我知道我可以減去 48,但這似乎有點老套。package mainimport (    "fmt")func main() {toCheck := "987654321"    var toSum []int    for i := len(toCheck) - 2; i >= 0; i = i-2 {        toSum = append(toSum, int(toCheck[i]))    }    fmt.Println(toSum)    // expected 2 4 6 8    // actual 50 52 54 56}預期輸出:2 4 6 實際:50 52 54 56
查看完整描述

3 回答

?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

但它給了我我認為是 ASCII 值的值——我知道我可以減去 48,但這似乎有點老套。


這不是黑客。您有一個表示 ascii 數(shù)字的字節(jié),您希望將其值作為 0-9 之間的整數(shù)獲取。你就是這樣做的。這也是將字符串轉(zhuǎn)換為整數(shù)的一般工作方式。您可以使用此方法將每個單獨的字節(jié)轉(zhuǎn)換為數(shù)字。


“0”的 UTF-8 表示不會很快改變。當然,48您可以減去而不是減去'0'。


為了使其更通用,也許您還應該返回一個布爾值,指示該字節(jié)是否可以轉(zhuǎn)換。


func ByteToInt(c byte) (int, bool) {

    if c >= '0' && c <= '9' {

        return int(c - '0'), true

    } else {

        return 0, false

    }

}

您可以在您的代碼示例中使用它,它會返回您的預期結(jié)果:


package main


import (

    "fmt"

)


func ByteToInt(c byte) (int, bool) {

    if c >= '0' && c <='9' {

        return int(c - '0'), true

    } else {

        return 0, false

    }

}


func main() {


toCheck := "987654321"


    var toSum []int

    for i := len(toCheck) - 2; i >= 0; i = i-2 {

        var digit, _ = ByteToInt(toCheck[i])

        toSum = append(toSum, digit)

    }


    fmt.Println(toSum)


}

https://play.golang.org/p/MRqtgY0ugZY

輸出是你所期望的:[2 4 6 8]


查看完整回答
反對 回復 2023-06-01
?
慕后森

TA貢獻1802條經(jīng)驗 獲得超5個贊

例如,


package main


import (

    "fmt"

)


func main() {

    toCheck := "987654321"

    fmt.Println(toCheck)

    toSum := make([]int, 0, len(toCheck)/2)

    for i := len(toCheck) - 2; i >= 0; i -= 2 {

        c := toCheck[i]

        if c >= '0' && c <= '9' {

            toSum = append(toSum, int(c-'0'))

        }

    }

    fmt.Println(len(toSum), cap(toSum), toSum)

}

游樂場: https: //play.golang.org/p/wtIgqEKj-Bk

輸出:

987654321
4 4 [2 4 6 8]

這是圍棋。代碼應該相當高效。例如,

$ go test sum_test.go -bench=. -benchmem

BenchmarkPeterSO-8         50000000     24.5 ns/op    32 B/op    1 allocs/op

BenchmarkTom-8             20000000     77.6 ns/op    56 B/op    3 allocs/op

BenchmarkUser10753492-8    20000000     79.0 ns/op    56 B/op    3 allocs/op

BenchmarkGrissom-8         20000000    108 ns/op      56 B/op    3 allocs/op

$

sum_test.go:


package main


import (

    "strconv"

    "testing"

)


// https://play.golang.org/p/wtIgqEKj-Bk

func BenchmarkPeterSO(b *testing.B) {

    toCheck := "987654321"

    for N := 0; N < b.N; N++ {

        toSum := make([]int, 0, len(toCheck)/2)

        for i := len(toCheck) - 2; i >= 0; i -= 2 {

            c := toCheck[i]

            if c >= '0' && c <= '9' {

                toSum = append(toSum, int(c-'0'))

            }

        }

    }

}


// https://play.golang.org/p/KgQrbesy5rT

func BenchmarkTom(b *testing.B) {

    toCheck := "987654321"

    for N := 0; N < b.N; N++ {

        var toSum []int

        for i := len(toCheck) - 2; i >= 0; i = i - 2 {

            toSum = append(toSum, int(toCheck[i]))

        }

    }

}


func ByteToInt(c byte) (int, bool) {

    if c >= '0' && c <= '9' {

        return int(c - '0'), true

    } else {

        return 0, false

    }

}


// https://play.golang.org/p/MRqtgY0ugZY

func BenchmarkUser10753492(b *testing.B) {

    toCheck := "987654321"

    for N := 0; N < b.N; N++ {

        var toSum []int

        for i := len(toCheck) - 2; i >= 0; i = i - 2 {

            var digit, _ = ByteToInt(toCheck[i])

            toSum = append(toSum, digit)

        }

    }

}


// https://play.golang.org/p/kNbQVn8GJ9R

func BenchmarkGrissom(b *testing.B) {

    toCheck := "987654321"

    for N := 0; N < b.N; N++ {

        var toSum []int

        for i := len(toCheck) - 2; i >= 0; i = i - 2 {

            v, _ := strconv.Atoi(string(toCheck[i]))

            toSum = append(toSum, v)

        }

    }

}



查看完整回答
反對 回復 2023-06-01
?
www說

TA貢獻1775條經(jīng)驗 獲得超8個贊

使用strconv包進行轉(zhuǎn)換


  for i := len(toCheck) - 2; i >= 0; i = i-2 {

        v,_ := strconv.Atoi(string(toCheck[i]))

        toSum = append(toSum, v)

    }

strconv.Atoi 是 strconv.ParseInt(s,10,0) 的快捷方式。


在你的操場上完成 https://play.golang.org/p/kNbQVn8GJ9R


查看完整回答
反對 回復 2023-06-01
  • 3 回答
  • 0 關(guān)注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號