题解 | #参数解析#

参数解析

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)
	}

}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务