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

}
相關文章
相關標籤/搜索