2019年2月28日木曜日

開発環境

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES) (Alan A.A. Donovan(著)、Brian W. Kernighan(著)、柴田 芳樹(翻訳)、丸善出版)の第3章(基本データ型)、3.3(文字列)、3.5.4(文字列とバイトスライス)、練習問題3.11の解答を求めてみる。

コード

package main

import (
 "bytes"
 "fmt"
)

func main() {
 intStrs := []string{
  "1", "12", "123", "1234", "12345", "123456789", "1234567890",
  "1.", ".1", "12.34", "123.45", "1234.567", "123456789.0123456789"}
 for _, s := range intStrs {
  fmt.Println(comma(s))
 }
}

func comma(s string) string {
 i := 0
 for ; i < len(s); i++ {
  if s[i] == '.' {
   break
  }
 }
 var buf bytes.Buffer
 s1 := s[:i]
 n := len(s1)
 start := false
 for j, c := range s1 {
  if !start {
   buf.WriteRune(c)
   start = true
  } else {
   if (n-j)%3 == 0 {
    fmt.Fprintf(&buf, ",%c", c)
   } else {
    buf.WriteRune(c)
   }
  }
 }
 if i > n {
  buf.WriteRune('.')
 }
 buf.WriteString(s[i:])
 return buf.String()
}

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

C:\Users\...>go run sample11.go 
1
12
123
1,234
12,345
123,456,789
1,234,567,890
1.
.1
12.34
123.45
1,234.567
123,456,789.0123456789

C:\Users\...>

0 コメント:

コメントを投稿