Go 语言 ACM 模式常用代码

常用的包

1
2
3
4
5
6
7
8
import(
"fmt"
"os"
"bufio"
"sort"
"strings"
)

处理基本输入

1
2
3
4
5
6
7
8
9
10
func main(){
in := bufio.NewScanner(os.Stdin)
in.Scan()
for in.Scan(){
str := in.Text()
s := strings.Split(str, " ")
sort.Strings(s) //排序
fmt.Println(strings.Join(s," ")) //将切片连接成字符串
}
}

fmt.Scan

1
2
var a,b int
fmt.Scan(&a,&b)

这个函数用于一个或多个数据绑定。它会用空格分割 stdin 输入数据,并把换行符算作空格,然后传递给本函数的参数。

fmt.Scanln

1
2
var a,b int
fmt.Scanln(&a,&b)

这个函数类似于 Scan,但是它会在遇到换行时停止扫描,必须在最后一项之后有换行符或 EOF。

fmt.Scanf

1
2
var x int
fmt.Scanf("%d",&x)

这个函数用于对空格分割的字符串或其他数据类型进行格式化,它会把换行符也当作输入的!由于数据是先缓存,然后再传递给参数,所以如果格式中没有换行符,但输入回车换行,会保存到下一个参数中!

强制类型转换

1
2
x := []rune(str)  // 字符串转rune切片
str := string(x) // rune切片转为字符串

字符串操作

字符串与 rune 切片转换

1
2
x := []rune(str)  // 字符串转 rune 切片
str := string(x) // rune 切片转为字符串

字符串查找

1
2
strings.IndexByte(str, byte) // 查找字符串中字符的第一个位置。LastIndexByte 是最后一个
strings.Index(str,str2) // 查找子串 str2 的第一个位置

字符串分割

1
strings.Split(str, str2) // 将 str 按 str2 作为分隔符进行分割,返回字符串切片

大小写切换

1
2
strings.ToLower(str) // string 全部转为小写
strings.ToUpper(str) // str 全部转为大写

字符串删除

1
strings.Trim(str, str2) // 将 str 中首位包含的 str2 全部删除

字符串反转

1
2
3
4
5
6
7
func reverseString(s string) string {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}

切片排序

升序排序

1
2
3
sort.Ints([]int) // 对 int 类型的切片升序排序
sort.Float64s([]float64) // 对 float64 类型的切片升序排序
sort.Strings([]string) // 对 string 类型的切片升序排序

降序排序

1
2
3
sort.Sort(sort.Reverse(sort.IntSlice([]int))) // 对 int 类型的切片降序排序
sort.Sort(sort.Reverse(sort.Float64Slice([]float64))) // 对 float64 类型的切片降序排序
sort.Sort(sort.Reverse(sort.StringSlice([]string))) // 对 string 类型的切片降序排序