go语言圣经练习
练习 3.10: 编写一个非递归版本的comma函数,使用bytes.Buffer代替字符串链接操作。
package main import (
"fmt"
"os"
"bytes"
) func main() {
for i := 1; i < len(os.Args); i++ {
fmt.Printf("%s\n", comma(os.Args[i]))
}
} func comma(s string) string {
var buf bytes.Buffer
n := len(s)
for i := n; i > 0 ; i-- {
buf.WriteByte(s[n-i])
if i % 3 == 1 && i > 3 {
buf.WriteString(",")
}
}
return buf.String()
}
练习 3.11: 完善comma函数,以支持浮点数处理和一个可选的正负号的处理。
package main import (
"fmt"
"os"
"bytes"
"strings"
) func main() {
for i := 1; i < len(os.Args); i++ {
fmt.Printf("%s\n", comma(os.Args[i]))
}
} func comma(s string) string {
var buf bytes.Buffer
n := len(s)
m := strings.IndexAny(s, ".")
for i := n; i > 0 ; i-- {
buf.WriteByte(s[n-i])
if (m == -1 && i % 3 == 1 && i > 3) || ( m != -1 && i % 3 == 1 && i > n-m+1) {
buf.WriteString(",")
}
}
return buf.String()
}
练习 3.12: 编写一个函数,判断两个字符串是否是是相互打乱的,也就是说它们有着相同的字符,但是对应不同的顺序。
package main import (
"fmt"
"os"
"strings"
) func main() {
fmt.Println(upset(os.Args[1], os.Args[2]))
} func upset(a, b string) string {
c := a + b
n := len(a)
j := 0
for i :=0; i < n; i++ {
if strings.Count(a, a[i:i+1]) == strings.Count(c, a[i:i+1])/2 {
j++
}
}
if !strings.EqualFold(a, b) && j == n {
return "YES"
} else {
return "NO"
}
}
go语言圣经练习的更多相关文章
- [日常] Go语言圣经--接口约定习题
Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自 ...
- [日常] Go语言圣经-Panic异常,Recover捕获异常习题
Go语言圣经-Panic异常1.当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)2.不是所有的panic异常都来自运行时,直接调用内置的pan ...
- [日常] Go语言圣经-匿名函数习题
Go语言圣经-匿名函数1.拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值2.通过这种方式定义的函数可以访 ...
- [日常] Go语言圣经-错误,函数值习题
Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...
- [日常] Go语言圣经-函数多返回值习题
Go语言圣经-函数多返回值1.在Go中,一个函数可以返回多个值2.许多标准库中的函数返回2个值,一个是期望得到的返回值,另一个是函数出错时的错误信息3.如果一个函数将所有的返回值都显示的变量名,那么该 ...
- [日常] Go语言圣经-文本和HTML模板习题
Go语言圣经-文本和HTML模板 练习 4.14: 创建一个web服务器,查询一次GitHub,然后生成BUG报告.里程碑和对应的用户信息. 1.查看下文档godoc net/http |grep H ...
- [日常] Go语言圣经--结构体,JSON习题
Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
- [日常] Go语言圣经--复合数据类型,数组习题
go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...
- [日常] Go语言圣经--复数,布尔值,字符串习题
go语言圣经-复数 1.我们把形如a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位.两种精度的复数类型:complex64和complex128,分别对应float3 ...
- [日常] Go语言圣经--作用域,基础数据类型,整型
go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是 ...
随机推荐
- mysql(mariadb)主从配置
环境: 内核版本:uname -r 系统版本:cat /etc/redhat-release
- Docker(4):Docker集中化web界面管理平台—Shipyard部署
//关闭防火墙 并禁止自启 [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable fir ...
- C# 查看EF生成的SQL语句
用sqlsever追踪最后的sql语句. 返回IQueryable<T>类型, 里面封装的就是生成的SQL脚本,设置断点queryable = DataContext.Set<T&g ...
- C++ WMI获取系统硬件信息(CPU/DISK/NetWork etc)
官网找到一个例子,根据例子修改下可以获取很多信息 #define _WIN32_DCOM #include <iostream> using namespace std; #include ...
- quotes 整站数据爬取存mongo
安装完成scrapy后爬取部分信息已经不能满足躁动的心了,那么试试http://quotes.toscrape.com/整站数据爬取 第一部分 项目创建 1.进入到存储项目的文件夹,执行指令 scra ...
- [转帖]deb包转化为rpm包
deb包转化为rpm包 https://www.cnblogs.com/noxy/p/6371399.html 改天尝试一下之前经常遇到能下载deb包 下载不到rpm包的情况. deb文件格式本是ub ...
- JS学习笔记:(二)回流和重绘
在搞清楚回流和重绘的概念之前,我们要清除浏览器的渲染过程. 解析生成DOM Tree(此时包含所有节点,包括display:none); 根据CSS Object Module(CCSSOM)计算节点 ...
- java中定时器的简单使用
1.首先肯定是容器一启动就要启动定时器,所以我们可以选择把定时器写在一个监听器里,容器一启动所以监听器也就跟着启动,然后定时器就可以工作了. 第一步,把自己写的监听器加到web.xml中: 第二步,写 ...
- JS继承以及继承的几种实现方式总结
传统面向对象语言:继承是类与类之间的关系. 而在js中由于es6之前没有类的概念,所以继承是对象与对象之间的关系. 在js中,继承就是指使一个对象有权去访问另一个对象的能力. 比如:比如对象a能够访问 ...
- [BZOJ 1095] [ZJOI 2007] 捉迷藏
Description 传送门 Solution 先将原树转化成点分树: 然后维护三个堆: \(c[i]\) 保存点分树中子树 \(i\) 中的黑色节点到 \(fa[i]\) 的距离: \(b[i]\ ...