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)
}
}