2019年3月24日日曜日

開発環境

プログラミング言語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 コメント:

コメントを投稿