婷婷同学_
Go 将字符串作为 UTF-8 编码的字节序列存储在内存中。这会以字节为单位一对一地映射 ASCII 字符,但超出该范围的字符会映射到多个字节。所以我建议在字符串上使用循环,该for range循环覆盖字符串的符文(字符),正确解码多字节符文。这样做的好处是它不需要分配(与将 转换为 不同string)[]rune。您也可以使用 打印对fmt.Printf("%c%c", char1, char2),这也不需要分配(与将runes 转换回string并连接它们不同)。要了解有关 Go 中的字符串、字符和符文的更多信息,请阅读博客文章:Go 中的字符串、字节、符文和字符由于循环仅返回迭代中的“当前”符文(而不是前一个或下一个符文),因此使用另一个变量来存储前一个(和第一个)符文,以便在打印时可以访问它们。让我们编写一个函数,根据需要打印对:func printPairs(s string) { var first, prev rune for i, r := range s { if i == 0 { first, prev = r, r continue } fmt.Printf("%c%c, ", prev, r) prev = r } // Print last pair: prev is the last rune fmt.Printf("%c%c\n", prev, first)}使用您的输入和另一个具有多字节符文的字符串对其进行测试:printPairs("p1k4")printPairs("Go-世界")输出将是(在Go Playground上尝试):p1, 1k, k4, 4pGo, o-, -世, 世界, 界G