最近看 《Go程序设计语言》 习题 3.10 需要编写一个非递归函数并且使用bytes.Buffer,任务是接受一个表示整数的字符串,如“123456”,从右侧开始每三位数字后面就插入一个逗号,形如 ‘123,456’。下面是我的解法,感觉有点繁琐,水平有限,目前还想不到好的想法,因此展示出来,目的有两个:1.作为标记,以后能回过头来使用更优解法。2.如有谁看到,能提点一下,在此感谢!
package main
import (
"bytes"
"fmt"
)
func comma(s string) string {
var b bytes.Buffer
n := len(s)
if n <= 3 {
return s
}
for i := n - 3; i > 0; i = i - 3 {
var new_b = bytes.NewBufferString("")
new_b.WriteString("," + s[i:i+3] + b.String())
b.Reset()
b.WriteString(new_b.String())
if i-3 <= 0 {
new_b.Reset()
new_b.WriteString(s[0:i] + b.String())
b.Reset()
b.WriteString(new_b.String())
}
}
return b.String()
}
func main() {
fmt.Println(comma("1234567"))
}
下面是lacrimarrum给的更好的解决方法,Thanks lacrimarrum
package main
import (
"bytes"
"fmt"
)
func main() {
fmt.Println(comma("1234567889988"))
}
func comma(s string) string {
var newByte byte = ','
n := len(s)
buf := bytes.NewBuffer([]byte{})
if n <= 3 {
return s
}
for i := 0; i < n; i++ {
if (n-i)%3 == 0 && i != 0 {
buf.WriteByte(newByte)
}
buf.WriteByte(s[i])
}
return buf.String()
}