Go语言圣经–Map习题详解编程语言

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

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

 

// Charcount computes counts of Unicode characters. 
package main 
 
import ( 
    "bufio" 
    "fmt" 
    "io" 
    "os" 
    "unicode" 
    "unicode/utf8" 
) 
 
func main() { 
    //counts := make(map[string]map[rune]int)    // counts of Unicode characters 
    var utflen [utf8.UTFMax + 1]int // count of lengths of UTF-8 encodings 
    invalid := 0                    // count of invalid UTF-8 characters 
 
    letters := make(map[rune]int) 
    numbers := make(map[rune]int) 
    in := bufio.NewReader(os.Stdin) 
    for { 
        r, n, err := in.ReadRune() // returns rune, nbytes, error 
        if err == io.EOF { 
            break 
        } 
        if err != nil { 
            fmt.Fprintf(os.Stderr, "charcount: %v/n", err) 
            os.Exit(1) 
        } 
        if r == unicode.ReplacementChar && n == 1 { 
            invalid++ 
            continue 
        } 
        /* 
        练习 4.8: 修改charcount程序,使用unicode.IsLetter等相关的函数,统计字母、数字等Unicode中不同的字符类别。 
        */ 
        //判断是字母 
        if unicode.IsLetter(r){  
                letters[r]++ 
        } 
        //判断是数字 
        if unicode.IsNumber(r){ 
                numbers[r]++ 
        } 
        //counts[r]++ 
        utflen[n]++ 
    } 
    fmt.Printf("rune/tcount/n") 
    for c, n := range letters { 
        fmt.Printf("%q/t%d/n", c, n) 
    } 
    fmt.Printf("rune(number)/tcount/n") 
    for c, n := range numbers { 
        fmt.Printf("%q/t%d/n", c, n) 
    } 
 
    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 main 
 
import ( 
    "bufio" 
    "fmt" 
    //"io" 
    "os" 
    //"unicode" 
    //"unicode/utf8" 
) 
 
func main() { 
        counts := make(map[string]int) 
        input := bufio.NewScanner(os.Stdin) 
        input.Split(bufio.ScanWords) 
        for input.Scan(){ 
                counts[input.Text()]++ 
        }    
        for k,v :=range counts{ 
                fmt.Printf("%s == %d /n",k,v) 
        }    
} 
/* 
练习 4.9: 编写一个程序wordfreq程序,报告输入文本中每个单词出现的频率。在第一次调用Scan前先调用input.Split(bufio.ScanWords)函数,这样可以按单词而不是按行输入。 
*/ 

Go语言圣经--Map习题详解编程语言  

  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12548.html

(0)
上一篇 2021年7月19日 14:43
下一篇 2021年7月19日 14:43

相关推荐

发表回复

登录后才能评论