我是lang的新手,我想打印字符串数组的单个字节
如下面的代码我想一次打印一次'h','e','l','l','o'值,但我无法做同样的事情。
func main() {
strslice := make([]string, 4, 5)
strslice[0] = "hello"
strslice[1] = "go"
strslice[2] = "lang"
strslice[3] = "whatsup"
for i := 0; i < len(strslice[i]); i++ {
fmt.Printf("slice is %c \n", strslice[i])
}
}
答案 0 :(得分:3)
一种可能的方法:
func main() {
strslice := make([]string, 4, 5)
strslice[0] = "hello"
strslice[1] = "go"
strslice[2] = "lang"
strslice[3] = "whatsup"
for i := 0; i < len(strslice); i++ {
for j := 0; j < len(strslice[i]); j++ {
fmt.Printf("slice[%d] is %c \n", i, strslice[i][j])
}
}
}
Demo。如您所见,每个strslice
元素都使用自己的循环变量(for
)在嵌套的j
循环中进行迭代。
在strslice[i][j]
中,i
用于访问slice(字符串)的元素,j
用于访问此字符串的特定字节。
请注意,它是字节,而不是字符 - 因为这正是所询问的内容。但是,如果你真的想要打印出字符串的每个字符,请检查精彩的@ peterSO的答案 - 因为你很有可能这样做。 )
答案 1 :(得分:3)
在Go中,字符文字作为UTF-8编码字节的可变宽度序列存储在字符串中。 ASCII码点(0x00..0x7F)占用一个字节。其他代码点占用2到4个字节。要单独打印代码点(字符),
package main
import "fmt"
func main() {
strslice := make([]string, 5, 5)
strslice[0] = "hello"
strslice[1] = "go"
strslice[2] = "lang"
strslice[3] = "whatsup"
strslice[4] = "Hello, 世界"
for _, s := range strslice {
for _, c := range s {
fmt.Printf("%c ", c)
}
fmt.Printf("\n")
}
}
输出:
h e l l o
g o
l a n g
w h a t s u p
H e l l o , 世 界
这里说明了UTF-8编码的字节和字符之间的区别,
package main
import "fmt"
func main() {
str := "Hello, 世界"
fmt.Println("Bytes:")
for i := 0; i < len(str); i++ {
fmt.Printf("'%c' ", str[i])
}
fmt.Printf("\n")
fmt.Println("Characters:")
for _, c := range str {
fmt.Printf("'%c' ", c)
}
fmt.Printf("\n")
}
输出:
Bytes:
'H' 'e' 'l' 'l' 'o' ',' ' ' 'ä' '¸' '' 'ç' '' ''
Characters:
'H' 'e' 'l' 'l' 'o' ',' ' ' '世' '界'
参考文献: