gpt4 book ai didi

string - 如何迭代字符串中的每 2 个连续字符?

转载 作者:行者123 更新时间:2023-12-05 08:29:24 24 4
gpt4 key购买 nike

我有这样一个字符串:

package main

import "fmt"

func main() {
some := "p1k4"

for i, j := range some {
fmt.Println()
}
}

我想在字符串中每两个连续的字符打印出来。输出应该像 p1, 1k, k4, 4p

我已经试过了,还是找不到答案,我应该如何在go中编写代码并获得我想要的输出?

最佳答案

Go 将字符串作为 UTF-8 编码的字节序列存储在内存中。这会以字节为单位一对一地映射 ASCII 字符,但超出该范围的字符会映射到多个字节。

所以我建议在字符串上使用 for range 循环,其范围在字符串的 rune (字符)上,正确解码多字节 rune 。这样做的好处是它不需要分配(不同于将 string 转换为 []rune)。您还可以使用 fmt.Printf("%c%c", char1, char2) 打印对,这也不需要分配(不像将 rune 转换回string 并将它们连接起来)。

要了解有关 Go 中的字符串、字符和 rune 的更多信息,请阅读博客文章:Strings, bytes, runes and characters in Go

由于循环只返回迭代中的“当前” rune (而不是前一个或下一个 rune ),请使用另一个变量来存储前一个(和第一个) rune ,以便您在打印时可以访问它们。

让我们编写一个函数,根据需要打印对:

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)
}

使用您的输入和另一个具有多字节 rune 的字符串对其进行测试:

printPairs("p1k4")
printPairs("Go-世界")

输出将是(在 Go Playground 上尝试):

p1, 1k, k4, 4p
Go, o-, -世, 世界, 界G

关于string - 如何迭代字符串中的每 2 个连续字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70575283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com