练习 4.8: 修改charcount程序,使用unicode.IsLetter等相关的函数,统计字母、数字等Unicode中不同的字符类别。

练习 4.9: 编写一个程序wordfreq程序,报告输入文本中每个单词出现的频率。在第一次调用Scan前先调用input.Split(bufio.ScanWords)函数,这样可以按单词而不是按行输入。

  1. // Charcount computes counts of Unicode characters.
  2. package main
  3.  
  4. import (
  5. "bufio"
  6. "fmt"
  7. "io"
  8. "os"
  9. "unicode"
  10. "unicode/utf8"
  11. )
  12.  
  13. func main() {
  14. //counts := make(map[string]map[rune]int) // counts of Unicode characters
  15. var utflen [utf8.UTFMax + 1]int // count of lengths of UTF-8 encodings
  16. invalid := 0 // count of invalid UTF-8 characters
  17.  
  18. letters := make(map[rune]int)
  19. numbers := make(map[rune]int)
  20. in := bufio.NewReader(os.Stdin)
  21. for {
  22. r, n, err := in.ReadRune() // returns rune, nbytes, error
  23. if err == io.EOF {
  24. break
  25. }
  26. if err != nil {
  27. fmt.Fprintf(os.Stderr, "charcount: %v\n", err)
  28. os.Exit(1)
  29. }
  30. if r == unicode.ReplacementChar && n == 1 {
  31. invalid++
  32. continue
  33. }
  34. /*
  35. 练习 4.8: 修改charcount程序,使用unicode.IsLetter等相关的函数,统计字母、数字等Unicode中不同的字符类别。
  36. */
  37. //判断是字母
  38. if unicode.IsLetter(r){
  39. letters[r]++
  40. }
  41. //判断是数字
  42. if unicode.IsNumber(r){
  43. numbers[r]++
  44. }
  45. //counts[r]++
  46. utflen[n]++
  47. }
  48. fmt.Printf("rune\tcount\n")
  49. for c, n := range letters {
  50. fmt.Printf("%q\t%d\n", c, n)
  51. }
  52. fmt.Printf("rune(number)\tcount\n")
  53. for c, n := range numbers {
  54. fmt.Printf("%q\t%d\n", c, n)
  55. }
  56.  
  57. fmt.Print("\nlen\tcount\n")
  58. for i, n := range utflen {
  59. if i > 0 {
  60. fmt.Printf("%d\t%d\n", i, n)
  61. }
  62. }
  63. if invalid > 0 {
  64. fmt.Printf("\n%d invalid UTF-8 characters\n", invalid)
  65. }
  66. }
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. //"io"
  7. "os"
  8. //"unicode"
  9. //"unicode/utf8"
  10. )
  11.  
  12. func main() {
  13. counts := make(map[string]int)
  14. input := bufio.NewScanner(os.Stdin)
  15. input.Split(bufio.ScanWords)
  16. for input.Scan(){
  17. counts[input.Text()]++
  18. }
  19. for k,v :=range counts{
  20. fmt.Printf("%s == %d \n",k,v)
  21. }
  22. }
  23. /*
  24. 练习 4.9: 编写一个程序wordfreq程序,报告输入文本中每个单词出现的频率。在第一次调用Scan前先调用input.Split(bufio.ScanWords)函数,这样可以按单词而不是按行输入。
  25. */

  

  

[日常] Go语言圣经--Map习题的更多相关文章

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

    练习 8.3: 在netcat3例子中,conn虽然是一个interface类型的值,但是其底层真实类型是*net.TCPConn,代表一个TCP连接.一个TCP连接有读和写两个部分,可以使用Clos ...

  2. [日常] Go语言圣经--JSON习题2

    练习 4.12: 流行的web漫画服务xkcd也提供了JSON接口.例如,一个 https://xkcd.com/571/info.0.json 请求将返回一个很多人喜爱的571编号的详细描述. 下载 ...

  3. [日常] Go语言圣经--浮点数习题

    练习 3.1: 如果f函数返回的是无限制的float64值,那么SVG文件可能输出无效的多边形元素(虽然许多SVG渲染器会妥善处理这类问题).修改程序跳过无效的多边形. 练习 3.2: 试验math包 ...

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

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

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

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

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

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

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

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

  8. [日常] go语言圣经-声明,变量,赋值,类型,包和文件习题

    go语言圣经-声明1.四种类型的声明语句:var.const.type和func,分别对应变量.常量.类型和函数实体对象的声明2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名 ...

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

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

随机推荐

  1. WPF 斜角border

    最近看了一些科技感UI设计,其中很多的按钮都不是常见的圆角边,而是斜角边.查了一下,wpf中好像没有现成的斜角border,网上也没搜到现成的,于是自己写了点时间做了一个,写的较简单,有一些bug(主 ...

  2. CentOS修改yum源为阿里云

    yum的工具,自动去下载某个yum仓库的 rpm软件包,并且自动搜索软件下载软件依赖,如同pip3,npm等包管理工具 yum载linux中的 yum仓库是 /etc/yum.repos.d 并且在这 ...

  3. RabbitMQ在mac上的安装

    1.官网下载rabbitmq-server-3.6.3, 地址http://www.rabbitmq.com/install-standalone-mac.html.2.tar -zxvf rabbi ...

  4. 【bug】VUE:Cannot read property '_withTask' of undefined

    如题 成因:极大可能是template上有某个函数,没有在 methods中声明导致的. 解决:找到那个未声明的函数名,写在methods中.你可以使用二分法快速找到.

  5. Linux巩固记录(5) hadoop 2.7.4下自己编译代码并运行MapReduce程序

    程序代码为 ~\hadoop-2.7.4\share\hadoop\mapreduce\sources\hadoop-mapreduce-examples-2.7.4-sources\org\apac ...

  6. linux设置静态ip地址

    首先我们使用ifconfig查看网卡配置信息 我们进入需要设置的网卡的配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 我们可以看到默认的配置是d ...

  7. C# 发送HTTP请求超时解决办法

    request.GetResponse();超时问题的解决,和HttpWebRequest多线程性能问题,请求超时的错误, 解决办法 1.将http的request的keepAlive设置为false ...

  8. Flask-Restful详解

    Restful API规范 restful api是用于在前端与后台进行通信的一套规范.使用这个规范可以让前后端开发变得更加轻松.以下将讨论这套规范的一些设计细节. 协议: 采用http或者https ...

  9. 剑指offer一之二维数组中的查找

    一.题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.解答方法: 方法 ...

  10. 安装eclipse启动时报错

    1.在安装eclipse后,点击exe文件时,提示出现错误,记录在log文件中,因为log文件就是日志文件,可以方便我们排查错误,打开log文件,可以看到文件记录了每次出错的时间和错误栈信息,最新一次 ...