1. 程式人生 > >[日常] Go語言聖經--復數,布爾值,字符串習題

[日常] Go語言聖經--復數,布爾值,字符串習題

++ sci bsp 整數 IT ... utf8 pac bre

go語言聖經-復數

1.我們把形如a+bi(a,b均為實數)的數稱為復數,其中a稱為實部,b稱為虛部,i稱為虛數單位。兩種精度的復數類型:complex64和complex128,分別對應float32和float64兩種浮點數精度

2.complex函數用於構建復數,real和imag函數分別返回復數的實部和虛部

go語言聖經-布爾型

1.布爾值可以和&&(AND)和||(OR)操作符結合,並且有短路行為

2.&&的優先級比||高

go語言聖經-字符串

1.一個字符串是一個不可改變的字節序列,文本字符串通常被解釋為采用UTF8編碼的Unicode碼點(rune)序列

2.內置的len函數可以返回一個字符串中的字節數目,不是字符數目,對於非ASCII字符的UTF8編碼會要兩個或多個字節

3.+操作符將兩個字符串鏈接構造一個新字符串

4.字符串值也可以用字符串面值方式編寫,只要將一系列字節序列包含在雙引號即可

5.原生的字符串面值形式是`...`,使用反引號代替雙引號用於編寫正則表達式,HTML模板、JSON面值、命令行提示信息會很方便

6.UTF8是一個將Unicode碼點編碼為字節序列的變長編碼,Go語言的源文件采用UTF8編碼,並且Go語言處理UTF8編碼的文本也很出色,Go語言的range循環在處理字符串的時候,會自動隱式解碼UTF8字符串

7.每個符號都分配一個唯一的Unicode碼點,Unicode碼點對應Go語言中的rune整數類型(譯註:rune是int32等價類型)。小於256碼點值可以寫在一個十六進制轉義字節中,例如\x41對應字符‘A‘,更大的碼點則必須使用\u或\U轉義形式

7.utf8.RuneCountInString(s)函數 統計字符個數

8.四個包對字符串處理尤為重要:bytes、strings、strconv和unicode包

9.將一個整數轉為字符串,一種方法是用fmt.Sprintf返回一個格式化的字符串;另一個方法是用strconv.Itoa(“整數到ASCII”):

10.字符串轉換成整數 strconv.ParseInt strconv.ParseFloat

練習 3.10: 編寫一個非遞歸版本的comma函數,使用bytes.Buffer代替字符串鏈接操作。

練習 3.11: 完善comma函數,以支持浮點數處理和一個可選的正負號的處理。

練習 3.12: 編寫一個函數,判斷兩個字符串是否是是相互打亂的,也就是說它們有著相同的字符,但是對應不同的順序。

package main

import(
        "fmt"
        "strings"
        "bytes"
)

func main(){
        fmt.Println(comma(-5123456.23))
        fmt.Println(compare("abec","ecab"))
}
/*
練習 3.10: 編寫一個非遞歸版本的comma函數,使用bytes.Buffer代替字符串鏈接操作。

練習 3.11: 完善comma函數,以支持浮點數處理和一個可選的正負號的處理。
*/
func comma(str float64)string{
        //整型轉換成字符串
        s := fmt.Sprintf("%.2f",str)
        //取出小數點後面部分
        var end string
        if dot := strings.LastIndex(s, "."); dot >= 0 {
                end = s[dot:]
                s = s[:dot]
        }
        num := len(s)
        var buf bytes.Buffer
        j := 1
        for i:=num-1;i>=0;i--{
                buf.WriteByte(s[i])
                if j%3==0 && i!=0{
                        buf.WriteString(",")
                }
                j++
        }
        res:=buf.String()
        var r bytes.Buffer
        //反轉字符串
        for i:=len(res)-1;i>=0;i--{
                r.WriteByte(res[i])
        }
        r.WriteString(end)
        return r.String()
}
//練習 3.12: 編寫一個函數,判斷兩個字符串是否是是相互打亂的,也就是說它們有著相同的字符,但是對應不同的順序。
func compare(str1 string,str2 string)bool{
        //比較兩個字符串的長度,外層循環是較長的
        num1:=strings.Count(str1,"")
        num2:=strings.Count(str2,"")
        if num2 > num1{
                str1,str2=str2,str1
        }
        var res bool
        for _,v :=range str1{
                res = false
                for _,sv :=range str2{
                        if v== sv{
                                res =true
                        }
                }
                if !res{
                        break
                }
        }
        return res
}

技術分享圖片  

[日常] Go語言聖經--復數,布爾值,字符串習題