为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕尼黑的夜晚无繁华 2022-01-17 17:55:36
我处理这个问题。我需要将字符串转换为 int。在这种情况下,我需要将“5 2 4 6 1 3”转换为例如 [6]int{5,2,4,6,1,3}。我是按照这段代码写的,尤其是AizuArray(). 似乎元素在这里是 int 。请告诉我我的方法是否正确?或者你能告诉我更好的方法吗?我问这个是因为我觉得我的方式是多余的,而Java 方式更容易。谢谢你。package mainimport (    "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 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

请告诉我我的方法是否正确?


如果您只想将字符串(空格分隔的整数)转换为 []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

}

那么你的方法是正确的。


我处理这个问题。


在这个问题的上下文中,您想从 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)

}


查看完整回答
反对 回复 2022-01-17
?
智慧大石

TA贡献1946条经验 获得超3个赞

我认为你把事情复杂化了,除非我遗漏了什么。


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)    

}


查看完整回答
反对 回复 2022-01-17
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

这是一个更简单的示例,您不必拆分字符串:


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 表)。对于 0,即 48。因此,您必须从“ascii 十进制”中您的数字对应的任何内容中减去 48。


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 265 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号