题解 | #参数解析#
参数解析
https://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
sc := bufio.NewScanner(os.Stdin)
sc.Scan()
s := sc.Text()
var result []string
var temp string
//遍历输入字符串
//如果没有遇见空格和双引号 则将字符存在一个temp变量里面
//等遇见空格的时候将temp 存入result切片里面
//如果遇见了双引号 则使用一个counter变量 遍历双引号后面的字符串
//双引号里面的东西 不管是不是空格 都存入temp里面
//直到遇见下一个双引号停止;
for i := 0; i < len(s); i++ {
counter := 1
if s[i:i+1] != "\"" && s[i:i+1] != " " {
temp = temp + s[i:i+1]
//如果此时刚好是字符串结尾,就需要手动将temp存入result
//因为此时要跳出循环了
if i == len(s)-1 {
result = append(result, temp)
}
} else if s[i:i+1] == " " {
//如果在引号外面的部分遇到了空格,说明一个参数解析完了,将其存入result
//然后初始化temp,准备接收下一个参数
result = append(result, temp)
temp = ""
} else if s[i:i+1] == "\"" {
for s[i+counter:i+counter+1] != "\"" {
temp = temp + s[i+counter:i+counter+1]
counter++
}
i = i + counter
//如果此时刚好是结尾,就需要手动将temp存入result
//因为此时要跳出循环了
if i == len(s)-1 {
result = append(result, temp)
}
}
}
fmt.Println(len(result))
for _, a := range result {
fmt.Println(a)
}
}

查看14道真题和解析
