版权声明:本文为博主原创文章,未经博主允许不得转载。 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’表示按行停止;
但是它也读取了最后的\npackage 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
输出
复制
5package 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) }