Go按行输入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/scylhy/article/details/88013363

Go按行输入

之前一直刷leetcode,不用处理输入问题,今天测试了一下华为机试,发现跟PAT一样得处理输入;
其中有一道题,就是要读取一个字符串,但是有空格分开的,例如输入是abc def;
对fmt.Scanf很熟悉,格式化也很方便,但是没有c的EOF,fmt.Scanf返回的是error,所以也就没法循环读取这一行了,或是循环了读取但退不出了。

  • bufio读取方法
    Reader.ReadLine()读取一行,要用到bufio的包;
    从输出结果看,把空格也读进去了,虽然跟c方式的读取不一样,并且多了空格,但是可以很方便的处理掉,视为一种方法。

    package main
    import "fmt"
    import "bufio"
    import "os"
    func main() {
    	reader := bufio.NewReader(os.Stdin)
    	bytes, _, _ := reader.ReadLine()
    	str := string(bytes)
    	fmt.Println(bytes)
    	fmt.Println(str)
    }
    /*
    localhost:~ liu$ go run test.go 
    abc def
    [97 98 99 32 100 101 102]
    abc def
    */
    

    bufio.ReadString(’\n’),可以自定义控制停止位置,用’\n’表示按行停止;
    但是它也读取了最后的\n

    package main
    import "fmt"
    import "bufio"
    import "os"
    
    func main() {
    	reader := bufio.NewReader(os.Stdin)
    	str, _ := reader.ReadString('\n')
    	fmt.Println(str)
    	fmt.Println("size:", len(str))
    }
    /*
     localhost:~ liu$ go run test.go 
    abc def
    abc def
    
    size: 8
    localhost:~ liu$ */
    
  • 其他格式化控制,就可以fmt.Scanf("%d",&ia)方式读取了

  • 华为机试demo
    题目描述
    计算字符串最后一个单词的长度,单词以空格隔开。
    输入描述:
    一行字符串,非空,长度小于5000。

    输出描述:
    整数N,最后一个单词的长度。

    示例1
    输入
    复制
    hello world
    输出
    复制
    5

    package main
    import "bufio"
    import "os"
    import "fmt"
    
    func main(){
        reader:=bufio.NewReader(os.Stdin)
        bytes,_,_:=reader.ReadLine()
        str:=string(bytes)
        a:=0
        for i:=0;i<len(str);i++{
            if str[i]==' '{
                a=i+1
            }
        }
        fmt.Println(len(str)-a)
    }
    

猜你喜欢

转载自blog.csdn.net/scylhy/article/details/88013363