我用this question解决。
我需要将字符串转换为int。
在这种情况下,我需要转换" 5 2 4 6 1 3"例如,[6] int {5,2,4,6,1,3}。
我写了这段代码,特别是AizuArray()
。
似乎元素是int here。
如果我的方法是正确的,你能告诉我吗?
或者你能告诉我更好的方法吗?
我问这个是因为我觉得我的方式是多余的,Java way要容易得多。
谢谢。
package main
import (
"fmt"
"reflect"
"strconv"
"strings"
)
func AizuArray(A string, N string) []int {
a := strings.Split(A, " ")
n, _ := strconv.Atoi(N) // int 32bit
b := make([]int, n)
for i, v := range a {
b[i], _ = strconv.Atoi(v)
}
return b
}
func main() {
A := "5 2 4 6 1 3"
N := "6"
j := strings.Split(A, " ")
for _, v := range j {
fmt.Println(reflect.TypeOf(v))
}
b := AizuArray(A, N)
fmt.Println(b)
for _, v := range b {
fmt.Println(reflect.TypeOf(v))
}
}
答案 0 :(得分:3)
如果我的方式正确,请告诉我吗?
如果您只想将字符串(空格分隔的整数)转换为[] int
func AizuArray(A string, N string) []int {
a := strings.Split(A, " ")
n, _ := strconv.Atoi(N) // int 32bit
b := make([]int, n)
for i, v := range a {
b[i], err = strconv.Atoi(v)
if err != nil {
//proper err handling
//either b[i] = -1 (in case positive integers)
}
}
return b
}
然后你的方法是正确的。
我解决了这个问题。
在此question的上下文中,您希望从STDIN获取输入,所以应该这样做,
package main
import (
"fmt"
)
func insertionSort(arr []int) {
//do further processing here.
fmt.Println(arr)
}
func main() {
var N int
fmt.Scanf("%d", &N)
b := make([]int, N)
for iter:=0;iter<N;iter++ {
fmt.Scanf("%d",&b[iter])
}
insertionSort(b)
}
答案 1 :(得分:0)
我觉得你过度复杂,除非我遗漏了什么。
https://play.golang.org/p/HLvV8R1Ux-
package main
import (
"fmt"
"strings"
"strconv"
)
func main() {
A := "5 2 4 6 1 3"
strs := strings.Split(A, " ")
ary := make([]int, len(strs))
for i := range ary {
ary[i], _ = strconv.Atoi(strs[i])
}
fmt.Println(ary)
}
答案 2 :(得分:0)
这是一个更简单的示例,您无需拆分字符串:
str := "123456"
if _, err := strconv.Atoi(str); err != nil {
// do stuff, in case str can not be converted to an int
}
var slice []int // empty slice
for _, digit := range str {
slice = append(slice, int(digit)-int('0')) // build up slice
}
您为什么需要int('0')
?因为int()
会将字符转换为相应的ASCII码(ascii table here)。对于0,则为48。因此,您必须从“ ascii十进制”中的数字所对应的值中减去48。