gpt4 book ai didi

string - 从 Go 中的字符串整数中获取整数片段?

转载 作者:IT王子 更新时间:2023-10-29 02:01:02 26 4
gpt4 key购买 nike

我想将表示整数的字符串转换为包含构成初始字符串的每个整数的 slice 。

Playground link

我试过在 strconv 中使用 Atoi() 函数,它给出了 "cannot use toCheck[i] (type byte) as type string在 strconv.Atoi 的参数中”。我也尝试过 int() 转换,但它给了我我认为是 ASCII 值的值——我知道我可以减去 48,但这看起来有点老套。

package main

import (
"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

最佳答案

but it's giving me what I believe are ASCII values - I know that I can just subtract 48, but that seems a little hacky.

这不是 hacky。您有一个表示 ascii 数字的字节,您希望将其值作为 0-9 之间的整数获取。你就是这样做的。这也是将字符串转换为整数的一般工作方式。您可以使用此方法将每个单独的字节转换为数字。

“0”的 UTF-8 表示不会很快改变。当然,您可以减去 '0' 而不是减去 48

为了使其更通用,也许您还应该返回一个 bool 值,指示该字节是否可以转换。

func ByteToInt(c byte) (int, bool) {
if c >= '0' && c <= '9' {
return int(c - '0'), true
} else {
return 0, false
}
}

您可以在您的代码示例中使用它,它会返回您预期的结果:

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]

关于string - 从 Go 中的字符串整数中获取整数片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com