目录

11.1


11.1

注意,为了方便验证程序输出结果,我将charcount程序做了一个小修改:原程序在打印字符统计时是无序的,我将其改为按照字典序打印

wordcount修改如下

    // ...counts[r]++utflen[n]++}fmt.Printf("rune\tcount\n")keys := []int{}for c := range counts {keys = append(keys, int(c))}// 将字符排序后按照顺序打印sort.Ints(keys)for _, c := range keys {fmt.Printf("%q\t%d\n", c, counts[rune(c)])}fmt.Print("\nlen\tcount\n")for i, n := range utflen {if i > 0 {fmt.Printf("%d\t%d\n", i, n)}}if invalid > 0 {fmt.Printf("\n%d invalid UTF-8 characters\n", invalid)}
}

测试代码:

package exercise11import ("bytes""fmt""log""os/exec""sort""strings""testing""unicode/utf8"
)
// 根据输入获取预期的输出结果
func getWantString(s string, invalid int) string {counts := map[rune]int{}utflen := [utf8.UTFMax + 1]int{}for _, r := range s {counts[r] += 1if r > 65534 {utflen[4]++} else if r > 2047 {utflen[3]++} else if r > 127 {utflen[2]++} else {utflen[1]++}}builder := bytes.NewBuffer([]byte{})builder.WriteString(fmt.Sprintf("rune\tcount\n"))keys := []int{}for c := range counts {keys = append(keys, int(c))}sort.Ints(keys)for _, c := range keys {builder.WriteString(fmt.Sprintf("%q\t%d\n", c, counts[rune(c)]))}builder.WriteString(fmt.Sprint("\nlen\tcount\n"))for i, n := range utflen {if i > 0 {builder.WriteString(fmt.Sprintf("%d\t%d\n", i, n))}}if invalid > 0 {builder.WriteString(fmt.Sprintf("\n%d invalid UTF-8 characters\n", invalid))}return builder.String()
}
// 执行wordcount程序并获得程序输出
func exec1(s string) (string, error) {cmd := exec.Command("../../../charcount")reader := strings.NewReader(s)cmd.Stdin = readerout, err := cmd.Output()cmd.Run()return string(out), err
}func TestCharcount(t *testing.T) {var tests = []struct {input stringwant  string}{{"逆向", getWantString("逆向", 0)},{"\xf1haha", getWantString("haha", 1)},{"", getWantString("", 0)},}for _, x := range tests {s, err := exec1(x.input)if err != nil {log.Fatal(err)}// 如果wordcount的输出与预期的输出不符合则报错if s != x.want {t.Errorf("%s 的预期\n%s与结果\n%s不符合\n", x.input, x.want, s)}}
}

《go语言圣经》习题答案-第11章相关推荐

  1. 《金融数据分析导论:基于R语言》习题答案(第一章)

     <金融数据分析导论:基于R语言>是芝加哥大学的教授Ruey S.Tsay所著,李洪成.尚秀芬.郝瑞丽翻译,机械工业出版社出版,是一本学习R语言和金融数据分析的很好的参考书籍. ** 注 ...

  2. C++程序设计(第2版)课后习题答案--第11章

    11.9  定义分数类Rational...... View Code 1 #include<iostream.h> 2 #include<stdlib.h> 3 class ...

  3. 河南理工大学c语言程序第六章答案,河南理工大学C语言课后习题答案精解第六章..ppt...

    河南理工大学C语言课后习题答案精解第六章. 选择题 (1) C语言中一维数组的定义方式为:类型说明符 数组名 A. [整型常量]B. [整型表达式] C. [整型常量]或[整型常量表达式]D. [变量 ...

  4. c语言程序设计第四版乌云高娃,C语言程序设计教学课件作者第2版乌云高娃课件源程序及习题答案第4章课件.ppt...

    C语言程序设计教学课件作者第2版乌云高娃课件源程序及习题答案第4章课件.ppt 第4章循环结构的流程及应用 学习目标 ? 使用循环处理需要反复执行的操作. ? 循环结构的流程图. ? 循环与条件的综合 ...

  5. c语言实验答案周信东第三章,桂林电子科技大学C语言程序设计习题答案周信东实验顺序结构与逻辑运算.pdf...

    桂林电子科技大学C语言程序设计习题答案周信东实验顺序结构与逻辑运算.pdf 成 绩 良 评 语 继 续 努 力 . 批 改 时 间 2013-11-16 105155 批 改 老 师 实 验 2 顺 ...

  6. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  7. C语言 用传统流程图表示分段函数,C语言程序设计习题答案

    C语言程序设计习题答案 习题一 C语言程序设计概述 一.名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6)编译程序P3 (7)解释程序P3 ...

  8. 数据结构c语言版第二版第三章课后答案,数据结构(C语言版)习题集答案第三章.doc...

    数据结构(C语言版)习题集答案第三章.doc 习题三3.1 3.10 3.13 3.5 3.6 3.15 3.17 3.19 3.24 3.29 3.31 3.51 给定操作序列P1P2P3PiPn( ...

  9. android应用程序设计张思民课后答案,Java语言程序设计习题答案(清华大学出版杜)张思民版...

    Java语言程序设计习题答案(清华大学出版杜)张思民版 更新时间:2017/2/6 12:39:00  浏览量:568  手机版 第1章 Java概述 [1]为什么说Java的运行与计算机硬件平台无关 ...

最新文章

  1. python数组越界_python 整数越界问题详解
  2. ThinkPHP控制器
  3. 面试java后端开发之后的一些感受
  4. boost::math::statistics相关用法的测试程序
  5. [剑指offer]面试题第[44]题[JAVA][数字序列中某一位的数字][找规律]
  6. 4KB/4MB 32位分页模式下的线性地址翻译以及CR3
  7. 软件开发作为一种价值领域的研究
  8. 移动应用后端应该使用 AWS 还是 Firebase?
  9. oracle函数 TO_MULTI_BYTE(c1)
  10. java 垃圾回收题目_我肝了万字的Java垃圾回收,看完你还敢说不会?
  11. Java锁--CyclicBarrier
  12. 智能机器人建房子后房价走势_机器人建楼、5G住宅……房地产下半场要这样玩...
  13. 君康人寿2019年排名_2019中国保险公司竞争力报告出炉 君康人寿盈利能力排名第二...
  14. CRM系统与呼叫中心系统对接
  15. Linux系统centos下如何通过命令查看CPU内存存储等硬件信息?
  16. 今天看到一句觉得很牛逼的话与诸君共享
  17. 阿里云的认证费用是多少?考试要多长时间?
  18. 计算机应用线型类型为虚线方点,cad怎样把线变成虚线或者点划线
  19. Racket编程指南——13 类和对象
  20. 操作系统用户接口与计算机接口有什么区别,1.操作系统既是硬件与其他软件的接口,又是用户与计算机之间的接口。...

热门文章

  1. Vue组件设计 | 实现水波涟漪效果的点击反馈指令
  2. java项目: ElasticSearch+Spark构建高相关性搜索服务千人千面推荐系统
  3. Python中进程与线程的(详细)教程之进程
  4. 腾讯入股巴西Nubank,一场2B2C的试炼
  5. 人脸识别 + 语音识别实现智能电话会议 | python demo
  6. wkhtmltopdf设置cookie
  7. JavaScript中使用递归函数
  8. [daily][device][bluetooth] 蓝牙怎么办!(archlinux下驱动蓝牙鼠标,以及三星手机)...
  9. Hadoop_HDFS的读写流程
  10. 性能优化之MySQL(Structured Query Languag)