来自 go程序设计语言 一书源博客地址go程序设计语言练习题
练习题3.10 编写一个非递归的comma函数,运用bytes.Buffer,而不是简单的字符串拼接
package main
import (
"bytes"
"fmt"
)
func main() {
fmt.Println(comma("1234567889988"))
}
func comma(s string) string {
var newByte byte = ','
n := len(s)
buf := bytes.NewBuffer([]byte{})
if n <= 3 {
return s
}
for i := 0; i < n; i++ {
if (n-i)%3 == 0 && i != 0 {
buf.WriteByte(newByte)
}
buf.WriteByte(s[i])
}
return buf.String()
}
练习4.3 重写函数reverse,使用数组指针作为参数而不是slice
package main
import (
"fmt"
)
func main() {
var arr [7]int = [7]int{1, 2, 3, 6, 48, 299, 4990}
reverse(&arr)
fmt.Println("In main(), arr values:", arr)
}
func reverse(arr *[7]int) {
for i, j := 0, len(*arr)-1; i < j; i, j = i+1, j-1 {
(*arr)[i], (*arr)[j] = (*arr)[j], (*arr)[i]
}
}
练习4.5,编写一个就地处理函数,用于去 除[]string slice 中相邻的重复字符串元素
package main
import (
"fmt"
)
func main() {
x := []int{1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 7}
x = remove(x)
fmt.Printf("%d", x)
}
func remove(slice []int) []int {
for i := range slice {
if i > len(slice)-1 {
return slice
}
fmt.Printf("%d\n", slice)
if i < len(slice)-1 && slice[i] == slice[i+1] {
copy(slice[i:], slice[i+1:])
slice = slice[:len(slice)-1]
fmt.Printf("%d \n", slice)
return remove(slice)
}
}
return slice
}