2019年3月21日木曜日

開発環境

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES) (Alan A.A. Donovan(著)、Brian W. Kernighan(著)、柴田 芳樹(翻訳)、丸善出版)の第4章(コンポジット型)、4.2(スライス)、4.2.2(スライス内での技法)、練習問題4.6の解答を求めてみる。

コード

package main

import (
 "fmt"
 "unicode"
)

func main() {
 bss := [][]byte{
  []byte(""),
  []byte("a"),
  []byte(" a"),
  []byte("a "),
  []byte("  a"),
  []byte("a  "),
  []byte("a b"),
  []byte("a  b"),
  []byte("  a   b    c"),
  []byte("   日 a  あ\n\t "),
 }
 for _, bs := range bss {
  fmt.Printf("%q\n", bs)
  fmt.Printf("%q\n\n", remove(bs))
 }
}

func remove(bs []byte) []byte {
 out := bs[:0]
 rs := []rune(string(bs))
 isSpace := false
 for _, r := range rs {
  if isSpace && !unicode.IsSpace(r) {
   isSpace = false
   out = append(out, ' ')
   for _, b := range []byte(string(r)) {
    out = append(out, b)
   }
  } else if unicode.IsSpace(r) {
   isSpace = true
  } else {
   for _, b := range []byte(string(r)) {
    out = append(out, b)
   }
  }
 }
 if isSpace {
  out = append(out, ' ')
 }
 return out
}

入出力結果(cmd(コマンドプロンプト)、Terminal)

C:\Users\...>go run sample6.go 
""
""

"a"
"a"

" a"
" a"

"a "
"a "

"  a"
" a"

"a  "
"a "

"a b"
"a b"

"a  b"
"a b"

"  a   b    c"
" a b c"

"\u3000\u3000 日\u3000a  あ\n\t\u3000"
" 日 a あ "


C:\Users\...>

0 コメント:

コメントを投稿