package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"unicode"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
var g = make(map[string]map[string]map[string]bool)
|
|
var s = []uint{1}
|
|
|
|
func main() {
|
|
counts := make(map[rune]int)
|
|
var utflen [utf8.UTFMax + 1]int
|
|
invalid := 0
|
|
|
|
in := bufio.NewReader(os.Stdin)
|
|
for {
|
|
r, n, err := in.ReadRune()
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "charcount:%v\n")
|
|
os.Exit(1)
|
|
}
|
|
if r == unicode.ReplacementChar && n == 1 {
|
|
invalid++
|
|
continue
|
|
|
|
}
|
|
counts[r]++
|
|
utflen[n]++
|
|
}
|
|
fmt.Printf("rune\tcount\n")
|
|
for c, n := range counts {
|
|
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)
|
|
|
|
}
|
|
|
|
}
|