Go语言按行输入处理实例-刷题技能

Go语言中文标准文档

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版权协议,转载请附上原文出处链接和本声明。