为了账号安全,请及时绑定邮箱和手机立即绑定

如何在go中遍历字符串中的每2个连续字符?

如何在go中遍历字符串中的每2个连续字符?

Go
蛊毒传说 2022-10-24 15:02:17
我有一个这样的字符串:package mainimport "fmt"func main() {    some := "p1k4"    for i, j := range some {            fmt.Println()    }}我想获取字符串中的每两个连续字符并打印它们。输出应该像p1, 1k, k4, 4p.我已经尝试过了,但仍然无法找到答案,我应该如何在 go 中编写代码并获得我想要的输出?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

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, 4p

Go, o-, -世, 世界, 界G


查看完整回答
反对 回复 2022-10-24
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

package main


import (

    "fmt"

)


func main() {

    str := "12345"

    for i := 0; i < len(str); i++ {

        fmt.Println(string(str[i]) + string(str[(i+1)%len(str)]))

    }


}


查看完整回答
反对 回复 2022-10-24
?
GCT1015

TA贡献1827条经验 获得超4个赞

这是对字符串的简单 for 循环,第一个字符附加在后面:


package main


import "fmt"


func main() {

    some := "p1k4"

    ns := some + string(some[0])

    for i := 0; i < len(ns)-1; i++ {

        fmt.Println(ns[i:i+2])

    }

}


查看完整回答
反对 回复 2022-10-24
  • 3 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信