我想创建一个脚本,对用户提供的参数进行插入排序,如下所示:
$ insertionSort 1 2 110 39
我希望它能够回归:
[1 2 39 110]
但它返回:
[1 110 2 39]
我认为这是因为os.Args数组中的元素是字符串。所以,我的问题是如何将os.Args数组的元素转换为整数?这是我的代码:
package main
import (
"fmt"
"os"
"reflect"
"strconv"
)
func main() {
A := os.Args[1:]
for i := 0; i <= len(A); i++ {
strconv.Atoi(A[i])
fmt.Println(reflect.TypeOf(A[i]))
}
for j := 1; j < len(A); j++ {
key := A[j]
i := j - 1
for i >= 0 && A[i] > key {
A[i+1] = A[i]
i = i - 1
A[i+1] = key
}
}
fmt.Println(A)
}
作为一个抬头,当我替换
strconv.Atoi(A[i])
有关
A[i] = strconv.Atoi(A[i])
我收到以下错误:
./insertionSort.go:14: multiple-value strconv.Atoi() in single-value context
感谢您的时间!
答案 0 :(得分:6)
Atoi返回
中的数字和错误(或零)ParseInt解释给定基数(2到36)中的字符串s并返回相应的值i。如果base == 0,则字符串的前缀暗示基数:&#34; 0x&#34;的基数为16,&#34; 0&#34;的基数为8,否则为10的基数。
bitSize参数指定结果必须适合的整数类型。位大小0,8,16,32和64对应于int,int8,int16,int32和int64。
ParseInt返回的错误具有具体类型* NumError并包含err.Num = s。如果s为空或包含无效数字,则err.Err = ErrSyntax且返回值为0; 如果对应于s的值不能用给定大小的有符号整数表示,则err.Err = ErrRange和返回值是相应bitSize和sign的最大幅度整数。
你需要这样做:
var err error
nums := make([]int, len(A))
for i := 0; i < len(A); i++ {
if nums[i], err = strconv.Atoi(A[i]); err != nil {
panic(err)
}
fmt.Println(nums[i])
}