众所周知,算法题中经常需要处理输入与输出的情况。一般存在以下三种情况,即固定数量字符输入,循环输入,单行输入的情况。
1. 循环输入
- 示例:
for {
var str string
n, _ := fmt.Scan(&str)
if n == 0 {
break
}
}
// 使用fmt.Scan()时,必须确保输入长度固定,并使用相应变量接收
for {
var str string
_, _ = fmt.Scan(&str)
}
- 题1:按照一定长度分割字符串并补全
来源:字符串分割
package main
import (
"fmt"
)
func main() {
for {
var str string
n, _ := fmt.Scan(&str)
if n == 0 {
break
}
for len(str) > 8 {
fmt.Println(str[:8])
str = str[8:]
}
// go生成连续重复字符还要用到for循环,真是糟心
var s string
for i := 0; i < 8 - len(str); i++ {
s = s + "0"
}
fmt.Println(str + s)
}
}
2. 固定长度输入
- 题2:数字去重与排序
来源:数字去重与排序
package main
import (
"fmt"
"sort"
)
// //通过map键的唯一性去重
func RemoveRepeatElement(nums []int) []int {
result := make([]int, 0)
m := make(map[int]bool) // map的值不重要
for _, v := range nums {
if _, ok := m[v]; !ok {
result = append(result, v)
m[v] = true
}
}
return result
}
func main() {
for {
// 记录输入数据个数
var n int
_, _ = fmt.Scanf("%d", &n)
if n <= 0 {
break
}
// 添加数据到切片中
var slice []int
for i := 0; i < n; i++ {
var num int
_, _ = fmt.Scanf("%d", &num)
slice = append(slice, num)
}
ret := RemoveRepeatElement(slice) // 去重
sort.Ints(ret)
for _, v := range ret {
fmt.Println(v)
}
}
}
3. 读取不定长输入
- 题3:计算字符串最后一个单词的长度
来源:字符串最后一个单词的长度
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
// 读取标准输入
inputReader := bufio.NewReader(os.Stdin) // 返回一个读取器实例Reader
input, err := inputReader.ReadString('\n') // 按照分隔符读取内容
if err != nil {
fmt.Println("输入错误")
}
if len(input) == 0 {
fmt.Println(0)
}
strs := strings.Fields(input) // 按照空格分割字符串
fmt.Println(len(strs[len(strs) - 1]))
}
版权声明:本文为ceshell原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。