Golang:如何将字符串转换为[] int?

时间:2016-06-11 15:55:20

标签: go

我用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))
    }
}

3 个答案:

答案 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。