[日常] 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
}

  

原文地址:https://www.cnblogs.com/taoshihan/p/8780392.html

时间: 2024-11-19 03:06:41

[日常] Go语言圣经--复数,布尔值,字符串习题的相关文章

[日常] Go语言圣经-基于select的多路复用习题

练习 8.8: 使用select来改造8.3节中的echo服务器,为其增加超时,这样服务器可以在客户端10秒中没有任何喊话时自动断开连接. reverb3.go package main import ( "bufio" "fmt" "log" "net" "strings" "sync" "time" ) func main() { listener, err :=

C语言中的布尔值

当我们把非0值赋给布尔类型,会变成1 例如 #include <stdio.h> int main() { bool a = -1; if (a==1) printf("true"); } 结果为true,证明a是等于1的 C语言中的布尔值

[日常] Go语言圣经--作用域,基础数据类型,整型

go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是一个编译时的属性 3.句法块是由花括弧所包含;我们可以把块(block)的概念推广到包括其他声明的群组,这些声明在代码中并未显式地使用花括号包裹起来,我们称之为词法块. 4.全局作用域 包级语法域 源文件级的作用域 局部作用域 函数级的作用域 5.从最内层的词法域向全局的作用域查找.内部的会覆盖外部

[日常] Go语言圣经--接口约定习题

Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自由的使用另一个满足相同接口的类型来进行替换被称作可替换性(LSP里氏替换) 练习 7.1: 使用来自ByteCounter的思路,实现一个针对对单词和行数的计数器.你会发现bufio.ScanWords非常的有用. package main import ( "bufio" "f

整数 布尔值 字符串 for循环

1.整型和布尔值的转换: # bin -- 十进制转二进制 # int("1101",2) -- 二进制转十进制 # 十进制转二进制的算法 # 除2 取余,获取的所有余数从下往上进行计算 # 二进制转十进制的算法 # 从右向左,依次乘以2的次方 # 1101 1* 2**0 + 0 * 2**1 + 1*2**2 + 1* 2**3 # python2 中有long /获取的是整数 # python3 中只有int /获取的是浮点数 2. 字符串的方法: #name = "m

Go语言圣经-Panic异常,Recover捕获异常习题

Go语言圣经-Panic异常1.当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)2.不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常:panic函数接受任何值作为参数.3.由于panic会引起程序的崩溃,因此panic一般用于严重错误,如程序内部的逻辑不一致,对于大部分漏洞,我们应该使用Go提供的错误机制,而不是panic4.为了方便诊断问题,runtime包允许输出堆栈信息 Go语言圣经-Reco

[日常] Go语言圣经--接口约定习题2

练习 7.3: 为在gopl.io/ch4/treesort (§4.4)的*tree类型实现一个String方法去展示tree类型的值序列. package main import( "fmt" "bytes" ) func main(){ //定义数组 arr:=[...]int{6,2,1,3,4,5} var t *tree for i:=0;i<len(arr);i++{ t=add(t,arr[i]) } //t1:=Sort(arr[:],t)

[日常] Go语言圣经--Channel习题

练习 8.3: 在netcat3例子中,conn虽然是一个interface类型的值,但是其底层真实类型是*net.TCPConn,代表一个TCP连接.一个TCP连接有读和写两个部分,可以使用CloseRead和CloseWrite方法分别关闭它们.修改netcat3的主goroutine代码,只关闭网络连接中写的部分,这样的话后台goroutine可以在标准输入被关闭后继续打印从reverb1服务器传回的数据.(要在reverb2服务器也完成同样的功能是比较困难的:参考练习 8.4.) 1.n

[日常] Go语言圣经-匿名函数习题2

练习5.13: 修改crawl,使其能保存发现的页面,必要时,可以创建目录来保存这些页面.只保存来自原始域名下的页面.假设初始页面在golang.org下,就不 要保存vimeo.com下的页面. package main import ( "fmt" "io" "io/ioutil" "links" "log" "net/http" "net/url" "