今天简单做一些练习
- 建立一个程序统计字符串里的字符数量:
asSASA ddd dsjkdsjs dk
同时输出这个字符串的字节数。提示: 看看unicode/utf8 包。
PS C:\Windows\system32> go doc unicode/utf8
package utf8 // import "unicode/utf8"
Package utf8 implements functions and constants to support text encoded in
UTF-8. It includes functions to translate between runes and UTF-8 byte
sequences.
const RuneError = '\uFFFD' ...
func DecodeLastRune(p []byte) (r rune, size int)
func DecodeLastRuneInString(s string) (r rune, size int)
func DecodeRune(p []byte) (r rune, size int)
func DecodeRuneInString(s string) (r rune, size int)
func EncodeRune(p []byte, r rune) int
func FullRune(p []byte) bool
func FullRuneInString(s string) bool
func RuneCount(p []byte) int
func RuneCountInString(s string) (n int)
func RuneLen(r rune) int
func RuneStart(b byte) bool
func Valid(p []byte) bool
func ValidRune(r rune) bool
func ValidString(s string) bool
func RuneCount(p []byte) int提示我们string应该转换成byte slice
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "asSASA ddd dsjkdsjs dk"
//length
fmt.Println(len([]byte(s)))//22
fmt.Println(len(s))//22
//rune
fmt.Println(utf8.RuneCount([]byte(s)))//22
}
- 扩展/修改上一个问题的程序,替换位置4 开始的三个字符为“abc”。
package main
import (
"fmt"
)
func main() {
s := "asSASA ddd dsjkdsjs dk"
r := []rune(s)
copy(r[4:7], []rune("abc"))
fmt.Println(s)//asSASA ddd dsjkdsjs dk
fmt.Println(string(r))//asSAabcddd dsjkdsjs dk
}
- 编写一个Go 程序可以逆转字符串,例如“foobar” 被打印成“raboof”。
package main
import (
"fmt"
)
func main() {
s := "foobar"
r := []rune(s)
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]//注意平行赋值可以交换值
}
fmt.Println(string(r))
}
注意平行赋值时用:=还是=的区别就在于:=时变量未声明
- 编写计算一个类型是float64 的slice 的平均值的代码。
package main
import (
"fmt"
)
func main() {
s := [5]float64{1.2, 3, 6.6, 8, 5}
var sum float64
for _, k := range s {
sum += k
}
fmt.Println(sum / float64(len(s)))//4.76
}