gpt4 book ai didi

go - 获取由空格分隔的输入的快速方法[Golang]

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

我正在尝试通过 scanner.Bytes 进行快速输入,并将其转换为 int。问题是:提供的输入是单行间隔元素(如数组),scanner.Bytes 将其作为一个整体读取并将其转换为 int。如何对读取的字节使用 Splitfunction!

func main()  {
scanner := bufio.NewScanner(os.Stdin)
var t int
fmt.Scanf("%d", &t)

for o := 0; o < t; o++ {
scanner.Scan()
//scanner.Split(bufio.ScanWords())
val := toInt(scanner.Bytes())
fmt.Println(val)
}
}

func toInt(buf []byte) (n int) {
for _, v := range buf {
n = n*10 + int(v-'0')
}
return
}

最佳答案

默认bufio.Scanner (使用默认的 split 函数)将输入分成多行,并去除行终止符。如果你想将输入分解成单词,你必须使用 Scanner.Split() 设置不同的拆分函数。方法。

有一个现成的分词功能:bufio.ScanWords() .我们可以在您的代码中看到此函数的注释。

但要知道 Scanner.Split() 方法需要一个函数值。您不需要调用拆分函数,扫描器会调用它来拆分输入数据。你只需要传递函数值,你可以在不调用它的情况下传递函数值,而无需在函数名称后附加 (),例如:

scanner.Split(bufio.ScanWords)

另请注意,在开始扫描输入之前,您只需执行一次,而且您只能执行一次,因此将此行移至 for 循环之上:

var t int
fmt.Scanf("%d", &t)

scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
for o := 0; o < t; o++ {
scanner.Scan()
val := toInt(scanner.Bytes())
fmt.Println(val)
}

现在运行应用程序,并输入以下行:

3
1 2 3

输出将是:

1
2
3

另请注意 Scanner.Scan()返回一个 bool 值,指示扫描是否成功,您可以处理 token 。您应该使用此返回值,而不是依赖于用户输入的有效数据。

关于go - 获取由空格分隔的输入的快速方法[Golang],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48135103/

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