開発環境
- 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 コメント:
コメントを投稿