開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES) (Alan A.A. Donovan(著)、Brian W. Kernighan(著)、柴田 芳樹(翻訳)、丸善出版)の第4章(コンポジット型)、4.3(マップ)、練習問題4.8の解答を求めてみる。
コード
package main
import (
"bufio"
"fmt"
"io"
"os"
"unicode"
)
func main() {
counts := map[string]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", err)
os.Exit(1)
}
if r == unicode.ReplacementChar && n == 1 {
invalid++
continue
}
switch {
case unicode.IsControl(r):
counts["IsControl"]++
case unicode.IsDigit(r):
counts["IsDigit"]++
case unicode.IsLower(r):
counts["IsLower"]++
case unicode.IsUpper(r):
counts["IsUpper"]++
case unicode.IsTitle(r):
counts["IsTitle"]++
case unicode.IsNumber(r):
counts["IsNumber"]++
case unicode.IsSpace(r):
counts["IsSpace"]++
case unicode.IsMark(r):
counts["IsMark"]++
case unicode.IsPrint(r):
counts["IsPrint"]++
case unicode.IsPunct(r):
counts["IsPunct"]++
case unicode.IsSymbol(r):
counts["IsSymbol"]++
case unicode.IsLetter(r):
counts["IsLetter"]++
default:
counts["Others"]++
}
}
fmt.Printf("%-10s %s\n", "分類", "個数")
for c, n := range counts {
fmt.Printf("%-10s\t%-5d\n", c, n)
}
if invalid > 0 {
fmt.Printf("\n%d invalid UTF-8 characters\n", invalid)
}
}
入出力結果(cmd(コマンドプロンプト)、Terminal)
C:\Users\...>go run sample8.go < sample8.go 分類 個数 IsLower 652 IsSpace 66 IsControl 182 IsPrint 252 IsDigit 10 IsUpper 68 C:\Users\...>
0 コメント:
コメントを投稿