Golang如何从命令行写入单词序列
Golang如何从命令行写入单词序列 你好,我正在尝试完成这个练习: 编写一个程序,从命令行接收一系列任意长度的单词,并打印出最长的单词。如果有多个单词长度相同且都是最长的,则程序打印最后一个。例如,如果用户输入单词序列 “one two four thirteen”,程序将打印 “thirteen”。 请注意:
- 数据来自命令行
- 我们有一个可以按顺序、以统一方式处理的数据序列
- 这些数据是字符串
- 程序启动时输入的所有数据都已存储在切片
os.Args中
我正在编写代码,但不知道如何设置与命令行中写入的参数相关的 main 函数。我写了以下代码:
package main
import (
"fmt"
"os"
"strings"
)
func longestword(s string) (best string) {
for _, word := range strings.Split(s, " ") {
if len(word) > len(best) {
best = word
}
}
return
}
func main() {
var arg string
for _, arg = range os.Args[1:] {
fmt.Println(arg)
}
}
是否有某个函数可以识别最长的单词?
更多关于Golang如何从命令行写入单词序列的实战教程也可以访问 https://www.itying.com/category-94-b0.html
虽然在这个用例中可能没人会注意到,但排序的时间复杂度是 O(n log n),而这个问题可以用原帖代码中 O(n) 的线性搜索来解决。原帖作者只需要修正几个小错误,并把各个部分正确地组合起来即可。
更多关于Golang如何从命令行写入单词序列的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
为什么不先对字符串进行排序,然后取第一个元素呢?
package main
import (
"fmt"
"os"
"sort"
)
func main() {
if len(os.Args) > 1 {
s_data := os.Args[1:]
sort.Slice(s_data, func(i, j int) bool { return len(s_data[i]) >= len(s_data[j]) })
fmt.Printf("The longest command line arg: '%s'\n", s_data[0])
}
}
你的代码已经接近完成,但需要调整处理命令行参数的方式。os.Args 切片包含了所有命令行参数,其中 os.Args[0] 是程序名,os.Args[1:] 才是用户输入的单词序列。不过,你的 longestword 函数期望一个用空格分隔的字符串,而 os.Args[1:] 已经是按空格分割后的切片了。因此,可以直接遍历 os.Args[1:] 来找到最长的单词。以下是修改后的代码:
package main
import (
"fmt"
"os"
)
func main() {
var longest string
for _, word := range os.Args[1:] {
if len(word) >= len(longest) {
longest = word
}
}
fmt.Println(longest)
}
这个程序会遍历命令行参数(从 os.Args[1] 开始),比较每个单词的长度,并更新 longest 变量。由于使用 >= 进行比较,当有多个单词长度相同时,会保留最后一个最长的单词。例如,输入 go run main.go one two four thirteen 会输出 thirteen。

