go程序设计语言练习题

来自 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

}