Go语言圣经–复数,布尔值,字符串习题详解编程语言

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语言圣经--复数,布尔值,字符串习题详解编程语言  

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/12551.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论