第 10 節:複合型別 小練習!

kuibatian發表於2019-12-03

1. 陣列作為函式引數

package main

import "fmt"

func swap(a int, b int) {
    a, b = b, a
}

func main0101() {
    a := 10
    b := 20
    //值傳遞  形參不能改變實參的值  形參和實參是不同的地址單元
    swap(a, b)

    fmt.Println(a)
    fmt.Println(b)
}

//陣列作為函式引數  返回值
func BubbleSort(arr [10]int)  [10]int {

    //fmt.Println(arr)
    //fmt.Println(len(arr))

    //arr[0]=123
    //arr[1]=234

    for i := 0; i < len(arr)-1; i++ {
        for j := 0; j < len(arr)-1-i; j++ {
            if arr[j] > arr[j+1] {
                arr[j], arr[j+1] = arr[j+1], arr[j]
            }
        }
    }

    return arr
    //fmt.Println(arr)

}
func main() {
    arr := [10]int{9, 1, 5, 6, 8, 4, 7, 10, 3, 2}
    //陣列作為函式引數是值傳遞
    //形參和實參是不同的儲存單元
    // 記憶體中有兩份獨立的陣列儲存不同的資料
    // 在函式呼叫結束形參單元銷燬 不會影響主調函式中實參的值

    //如果想通過函式計算結果並傳遞給實參 需要使用陣列作為函式的返回值
    arr = BubbleSort(arr)

    fmt.Println(arr)

}

2. 切片作為函式引數

package main

import "fmt"

//切片名作為函式引數 返回值
func test(s []int) []int{
    //fmt.Println(s)
    //fmt.Println(len(s))
    //s[0]=123
    //s[5]=666
    //fmt.Printf("%p\n", s)

    //for i := 0; i < len(s)-1; i++ {
    //  for j := 0; j < len(s)-1-i; j++ {
    //      if s[j] > s[j+1] {
    //          s[j], s[j+1] = s[j+1], s[j]
    //      }
    //  }
    //}

    //如果是函式中使用append進行資料新增時 形參的地址改變就不會在指向實參的地址

    s = append(s, 11, 12, 13, 14, 15)
    fmt.Printf("%p\n",s)
    fmt.Println(s)
    return s
}
func main() {
    //切片名本身就是一個地址
    slice := []int{9, 1, 5, 6, 8, 4, 7, 10, 3, 2}
    fmt.Printf("%p\n", slice)
    //地址傳遞  形參可以改變實參
    slice=test(slice)

    fmt.Println(slice)
}

3. 字串處理函式

package main

import (
    "strings"
    "fmt"
)

func main0301() {
    //查詢一個字串在另外一個字串中是否出現
    str1:="hello world"
    str2:="llo"
    //Contains(被查詢字串,查詢字串)
    //一般用作於模糊查詢
    b:=strings.Contains(str1,str2)
    if b{
        fmt.Println("找到了")
    }else{
        fmt.Println("未找到")
    }
}

func main0302(){
    //字串切片
    slice:=[]string{"1234","4637","2907","2308"}
    //字串連線
    str:=strings.Join(slice,",")
    fmt.Println(str)

}

func main0303(){

    str1:="hello worllod"

    str2:="llo"

    //查詢一個字串在另外一個字串中第一次出現的位置 返回值為int型別是下標
    i:=strings.Index(str1,str2)

    fmt.Println(i)
}
func main0304(){
    str:="性感法師線上講課"
    //將一個字串重複n次
    str1:=strings.Repeat(str,3)
    fmt.Println(str1)
}

func main0305(){

    str:="性感法師線上性感講課"
    //字串替換  用作於遮蔽敏感詞彙
    //如果替換次數小於0 表示全部替換
    str1:=strings.Replace(str,"性感","**",-1)
    fmt.Println(str1)

}

func main0306(){
    //str1:="1300-199-1433"//13001991433
    str1:="123456@qq.com"
    //將字串按照標誌位進行切割變成切片
    slice:=strings.Split(str1,"@")

    //str2:=strings.Join(slice,"")

    fmt.Println(slice[0])
    //fmt.Println(str2)
}

func main0307(){

    str:="=====a=u=ok========"
    //去掉字串頭尾內容
    str1:=strings.Trim(str,"=")

    fmt.Printf("%s",str1)
}

func main0308(){

    str:="    are you ok     "

    //去掉字串中的空格轉成切片  一般用於做統計單詞個數
    slice:=strings.Fields(str)

    //fmt.Println(slice)
    //for _,v:=range slice{
    //  fmt.Printf("=%s=\n",v)
    //}
    fmt.Println(len(slice))
}

func main(){
    //查詢
    //bool型別=strings.Contains(被查詢字串,查詢字串)
    //int型別=strings.Index(被查詢字串,查詢字串)

    //分割組合
    //string型別=strings.Join(字串切片,標誌)
    //[]string型別=strings.Split(切割字串,標誌)

    //重複和替換
    //string型別=strings.Repeat(字串,次數)
    //string型別=strings.Replace(字串,被替換字串,替換字串,次數)

    //去掉內容
    //string型別=strings.Trim(字串,去掉字串)
    //[]string型別=strings.Fields(字串)
}

4. 字串型別轉換

package main

import (
    "fmt"
    "strconv"
)

func main0401() {

    str:="hello world"

    //將字串轉成字元切片  強制型別轉換
    slice:=[]byte(str)

    //fmt.Println(slice)

    slice[4]='a'
    for i:=0;i<len(slice);i++{
        fmt.Printf("%c",slice[i])
    }

}
func main0402(){
    //字元切片
    slice:=[]byte{'h','e','l','l','o',97}

    //fmt.Println(slice)

    fmt.Println(string(slice))
}
func main0403(){
    //將其他型別轉成字串  Format
    //b:=false
    //str:=strconv.FormatBool(b)
    //fmt.Println(str)

    //str:=strconv.FormatInt(123,10)//在計算機中進位制可以表示2-36進位制  2 8 10 16
    //fmt.Println(str)

    //str:=strconv.FormatFloat(3.14159,'f',4,64)
    //fmt.Println(str)

    str:=strconv.Itoa(123)
    fmt.Println(str)
}

func main0404(){
    //將字串轉成其他型別
    //b,err:=strconv.ParseBool("true")
    //if err != nil{
    //  fmt.Println("型別轉化出錯")
    //}else{
    //  fmt.Println(b)
    //}

    //value,_:=strconv.ParseInt("abc",16,64)
    //fmt.Println(value)

    //value,_:=strconv.ParseFloat("3.14159",64)
    //fmt.Println(value)

    //value,_:=strconv.Atoi("123")
    //
    //fmt.Println(value)
}

func main(){

    slice:=make([]byte,0,1024)
    //將其他型別轉成字串新增到字元切片裡面

    slice=strconv.AppendBool(slice,false)
    slice=strconv.AppendInt(slice,123,2)

    slice=strconv.AppendFloat(slice,3.14159,'f',4,64)
    slice=strconv.AppendQuote(slice,"hello")

    fmt.Println(string(slice))
}

相關文章