gpt4 book ai didi

arrays - 在 Go 中如何将整数字符串转换为数组?

转载 作者:IT王子 更新时间:2023-10-29 01:34:18 25 4
gpt4 key购买 nike

我在任何地方都找不到这个(或者我只是不明白)。我正在从文件中读取由空格分隔的数字列表。 IE。该文件看起来像“1 4 0 0 2 5 ...等”,我希望它以数组的形式出现(或者,最好是二维数组,其中每个新行也被分隔开)。我该怎么做呢?

这是我到目前为止的代码——其中很多是从我找到的教程中摘取的,所以我并不完全理解所有的代码。它可以很好地读取文件,并返回一个字符串。附带问题:当我打印字符串时,我在输出的末尾得到这个:%!(EXTRA)有谁知道如何解决这个问题?我假设它将最后一个 nil 字符放在返回字符串中,但我不知道如何解决这个问题。

package main
import (
"fmt"
"os"
)

func read_file(filename string) (string, os.Error) {
f, err := os.Open(filename)
if err != nil {
return "", err
}
defer f.Close() // f.Close will run when we're finished.

var result []byte
buf := make([]byte, 100)
for {
n, err := f.Read(buf[0:])
result = append(result, buf[0:n]...) // append is discussed later.
if err != nil {
if err == os.EOF {
break
}
return "", err // f will be closed if we return here.
}
}
return string(result), nil // f will be closed if we return here.
}

func print_board() {

}

func main() {
fmt.Printf(read_file("sudoku1.txt")) // this outputs the file exactly,
// but with %!(EXTRA <nil>) at the end.
// I do not know why exactly
}

非常感谢您提供的任何帮助。

-W

最佳答案

您可以使用字符串包将字符串转换为二维整数数组。解释此处使用的一些语言结构有点超出了这个问题的范围,但请随时要求澄清任何问题。

// read_file also returns an error!
s, err := read_file("sudoku1.txt")
if err != nil {
panic(err.String())
}

// split into rows at newlines
rows := strings.Split(s, "\n")
board := make([][]int, len(rows))
for i, row := range rows {
// extract all whitespace separated fields
elems := strings.Fields(row)
board[i] = make([]int, len(elems))
for j, elem := range elems {
var err os.Error
// convert each element to an integer
board[i][j], err = strconv.Atoi(elem)
if err != nil {
panic(err.String())
}
}
}
fmt.Println(board)

%(!EXTRA <nil>) 的原因是 read_file 返回两个值,第二个是错误(在本例中为 nil)。 Printf 尝试将第二个值与字符串中的槽相匹配。由于该字符串不包含任何格式化槽(%v、%d、%s...),Printf 确定它是一个额外参数,并在输出中说明这一点。

请注意,包 ioutil 已经提供了一个 ReadFile 函数,它将为您提供一个 []byte 而不是一个字符串,但在其他方面的功能与您的 read_file 相同。

关于arrays - 在 Go 中如何将整数字符串转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8246946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com