题解 | #配置文件恢复#
配置文件恢复
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// 创建map
var mymap = map[string]string{
"reset": "reset what",
"reset board": "board fault",
"board add": "where to add",
"board delete": "no board at all",
"reboot backplane": "impossible",
"backplane abort": "install first",
}
func main() {
scan := bufio.NewScanner(os.Stdin)
// 多次扫描
for scan.Scan() {
ok, cmd := Test(scan.Text())
if ok {
fmt.Println(cmd)
} else {
fmt.Println("unknown command")
}
}
}
func Test(str string) (ok bool, res string) {
strarr := strings.Split(str, " ")
length:=len(strarr)
var resarr []string
// 看那些指令符合
for k,v:=range mymap{
cmdarr:=strings.Split(k," ")
// 指令个数是否相同
if length==len(cmdarr){
isok:=true
var flag []bool
// 循环看一下是否用户输入和指令是否对的上
for i:=0;i<length;i++{
// if strarr[i]!=cmdarr[i][:len(strarr[i])]这个判断条件是有问的,因为指令组成单词有长有短
// 这边用了index方法进行判断
if strings.Index(cmdarr[i], strarr[i])!=0{
flag = append(flag, false)
// 有一个false直接break
break
}else{
flag = append(flag, true)
}
}
for _,j:=range flag{
if !j{
isok=false
break
}
}
// 全部ok就加入待选数组
if isok{
resarr=append(resarr, v)
}
}else{
continue
}
}
// 对待选数组进行判断
if len(resarr)==1{
ok=true
res=resarr[0]
return
}
return
}
