练习 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语言圣经练习的更多相关文章

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

    Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自 ...

  2. [日常] Go语言圣经-Panic异常,Recover捕获异常习题

    Go语言圣经-Panic异常1.当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)2.不是所有的panic异常都来自运行时,直接调用内置的pan ...

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

    Go语言圣经-匿名函数1.拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值2.通过这种方式定义的函数可以访 ...

  4. [日常] Go语言圣经-错误,函数值习题

    Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...

  5. [日常] Go语言圣经-函数多返回值习题

    Go语言圣经-函数多返回值1.在Go中,一个函数可以返回多个值2.许多标准库中的函数返回2个值,一个是期望得到的返回值,另一个是函数出错时的错误信息3.如果一个函数将所有的返回值都显示的变量名,那么该 ...

  6. [日常] Go语言圣经-文本和HTML模板习题

    Go语言圣经-文本和HTML模板 练习 4.14: 创建一个web服务器,查询一次GitHub,然后生成BUG报告.里程碑和对应的用户信息. 1.查看下文档godoc net/http |grep H ...

  7. [日常] Go语言圣经--结构体,JSON习题

    Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...

  8. [日常] Go语言圣经--复合数据类型,数组习题

    go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...

  9. [日常] Go语言圣经--复数,布尔值,字符串习题

    go语言圣经-复数 1.我们把形如a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位.两种精度的复数类型:complex64和complex128,分别对应float3 ...

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

    go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是 ...

随机推荐

  1. SQL Server系统表sysobjects介绍

    SQL Server系统表sysobjects介绍 sysobjects 表结构: 列名 数据类型 描述 name sysname 对象名,常用列 id int 对象标识号 xtype char(2) ...

  2. Andriod studio 打包aar

    因为项目不同,有些公用库而且还是c++的,还有一些带资源的,简单的复制遇到库升级又是一轮配置,编译成aar则解决这些麻烦. 但是默认andriod studio的make moudle只生成debug ...

  3. vue 利用mockJs 模拟数据

    工作这几年一直用Java 开发,前端的技术自己也忘得差不多了(实际上自己也不怎么会),最近参与的项目是用VUE +  Element-ui + springboot 写的,由于需求没有定,先画一个de ...

  4. 牛津初阶字典单词F-联想故事

    从前有一个fable寓言,讲的是奥巴马穿着棉fabrics织物,走在去往学校的路上,他的心情fabulous极好的,绝妙的.因为他学校的facilities 设施fabulous非常棒,但有些人不喜欢 ...

  5. Java注解原理

    1. @interface不是接口是注解类,使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节 2. @in ...

  6. awk删除最后一个字符

    删除最后一个字符 如:1.1.1,  在file文件中: sed '$s/.$//' file 或者: head -c-2  去掉最后一个字符 head -c-3  去掉最后二个字符 head -c- ...

  7. git 本地代码冲突解决,强制更新

    git reset soft,hard,mixed之区别深解 git reset --hard  强制更新覆盖本地   GIT reset命令,似乎让人很迷惑,以至于误解,误用.但是事实上不应该如此难 ...

  8. A Base Class pointer can point to a derived class object. Why is the vice-versa not true?

    问题转载自:https://stackoverflow.com/questions/4937180/a-base-class-pointer-can-point-to-a-derived-class- ...

  9. Linux调整日期时间

    Linux日期不准确,要更改 Linux 系统整个系统范围的时区可以使用如下命令: sudo rm -f /etc/localtime sudo ln -s /usr/share/zoneinfo/A ...

  10. Python静态网页爬取:批量获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...