mik*_*iku 22 idioms type-conversion go rune
在下面的代码中,我string用符文迭代一个符文,但实际上我需要int执行一些校验和计算.我真的需要来编码rune成一个[]byte,然后将其转换为一个string,然后用Atoi获得的int出来的rune?这是惯用的方式吗?
// The string `s` only contains digits.
var factor int
for i, c := range s[:12] {
if i % 2 == 0 {
factor = 1
} else {
factor = 3
}
buf := make([]byte, 1)
_ = utf8.EncodeRune(buf, c)
value, _ := strconv.Atoi(string(buf))
sum += value * factor
}
Run Code Online (Sandbox Code Playgroud)
Gus*_*yer 53
问题比它看起来更简单.你一个转换rune值的int与值int(r).但是你的代码暗示你想要数字的ASCII(或UTF-8)表示中的整数值,你可以简单地将其r - '0'作为a rune或int(r - '0')a int.请注意,超出范围的符文会破坏这种逻辑.
pet*_*rSO 11
例如sum += (int(c) - '0') * factor,
package main
import (
"fmt"
"strconv"
"unicode/utf8"
)
func main() {
s := "9780486653556"
var factor, sum1, sum2 int
for i, c := range s[:12] {
if i%2 == 0 {
factor = 1
} else {
factor = 3
}
buf := make([]byte, 1)
_ = utf8.EncodeRune(buf, c)
value, _ := strconv.Atoi(string(buf))
sum1 += value * factor
sum2 += (int(c) - '0') * factor
}
fmt.Println(sum1, sum2)
}
Run Code Online (Sandbox Code Playgroud)
输出:
124 124
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21905 次 |
| 最近记录: |