go语言* map 章节习题

github地址
笔记

4,8

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

令人惊讶的是 汉字也算是letter

func charCount(s string)  {
	var letterCount,numberCount,otherCount int
	// 输入
	//将 s 作为 输入
	in := bufio.NewReader(strings.NewReader(s))
	for  {
		// 以 rune 为单位读取
		r, n, err := in.ReadRune()

		if err == io.EOF {
			break
		}
		if err != nil {
			fmt.Fprintf(os.Stderr, "charcount: %v
", err)
			os.Exit(1)
		}
		// 无效码点
		if r == unicode.ReplacementChar && n == 1 {
			//invalid++
			continue
		}
		if unicode.IsNumber(r) {
			numberCount++
			fmt.Printf("%v is number
",r)
		}else if unicode.IsLetter(r){
			letterCount++
			fmt.Printf("%v is letter
",r)
		}else {
			otherCount++
		}

	}
	fmt.Printf("letter: %v,	 number,%v	 other: %v",letterCount,numberCount,otherCount)
}

4.9

package ex4_9

import (
"fmt"
)

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

func wordFreq(words []string) {
count := make(map[string]int)
for _,word :=range words{
count[word] +=1
}
for k,v := range count {
fmt.Printf("%v %v ",k,v)
}
}

原文地址:https://www.cnblogs.com/Jun10ng/p/12782021.html