题解 | #参数解析#
参数解析
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) } }