package bufio
import "bufio"
bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。
type Scanner
type Scanner struct {
// 内含隐藏或非导出字段
}
Scanner类型提供了方便的读取数据的接口,如从换行符分隔的文本里读取每一行。
func NewScanner
func NewScanner(r io.Reader) *Scanner
NewScanner创建并返回一个从r读取数据的Scanner,默认的分割函数是ScanLines。
func (*Scanner) Split
func (s *Scanner) Split(split SplitFunc)
Split设置该Scanner的分割函数。本方法必须在Scan之前调用。
func (*Scanner) Scan
func (s *Scanner) Scan() bool
Scan方法获取当前位置的token(该token可以通过Bytes或Text方法获得),并让Scanner的扫描位置移动到下一个token。当扫描因为抵达输入流结尾或者遇到错误而停止时,本方法会返回false。在Scan方法返回false后,Err方法将返回扫描时遇到的任何错误;除非是io.EOF,此时Err会返回nil。
func (*Scanner) Text
func (s *Scanner) Text() string
Bytes方法返回最近一次Scan调用生成的token,会申请创建一个字符串保存token并返回该字符串。
package strings
import "strings"
strings包实现了用于操作字符的简单函数。
func Split
func Split(s, sep string) []string
用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。
package strconv
import "strconv"
strconv包实现了基本数据类型和其字符串表示的相互转换。
func Atoi
func Atoi(s string) (i int, err error)
Atoi是ParseInt(s, 10, 0)的简写。字符串转为整数型。
func Itoa
func Itoa(i int) string
Itoa是FormatInt(i, 10) 的简写。整数型转字符串。
操作实例
输入任务
- 输入一个整数
n表示接下来要输入的行数 - 每行输入一些整数数据用空格分隔
- 用二维数组(切片)接收这些数字
代码实现
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
var n int // 输入行数
ans := make([][]int, n) // 保存每行输入的数
sca := bufio.NewScanner(os.Stdin) // 创建一个Scanner结构体实例对象
fmt.Scanf("%d\n", &n)
for i := 0; i < n; i++ { //读一行
if sca.Scan() {
strSlice := strings.Split(sca.Text(), " ") //转成string,再按空格符切分
nums := make([]int, 0) // 用于记录每一行内的数字
for _, v := range strSlice {
num, _ := strconv.Atoi(v) // string转int
nums = append(nums, num)
}
ans = append(ans, nums) // 添加到的二维数组
}
}
fmt.Println(ans)
}
/*
input:
5
1 2 3
0
1 2
3
5 1 3 1
output:
[[1 2 3] [0] [1 2] [3] [5 1 3 1]]
*/
版权声明:本文为qq_22328011原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。