drt5813 2019-02-10 14:37
浏览 46
已采纳

在go中遍历字符串字符的最正确方法是什么

I am newbie at Go and I wish to iterate the characters of a string

package main

import (
    "fmt"
)

func main() {
    var a string = "abcd"
    for i, c := range a {
        fmt.Printf("%d %s
", i, c)
    }
}

I want the output to be

    0 a
    1 b
    2 c
    3 d

but it's not. What am I doing wrong?

  • 写回答

1条回答 默认 最新

  • dongzhe3573 2019-02-10 14:40
    关注

    Fix the go vet and package fmt format error messages (type rune is an alias for type int32):

    10: Printf format %s has arg c of wrong type rune
    
    0 %!s(int32=97)
    1 %!s(int32=98)
    2 %!s(int32=99)
    3 %!s(int32=100)
    

    Playground: https://play.golang.org/p/oM9D8oNlaAO

    A rune is a Unicode code point (character), not a string.

    Use %c not%s. For example,

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var a string = "abcd"
        for i, c := range a {
            fmt.Printf("%d %c
    ", i, c)
        }
    }
    

    Playground: https://play.golang.org/p/LFQPGZ9X5kk

    Output:

    0 a
    1 b
    2 c
    3 d
    

    An example of type string UTF-8 variable-length encoding:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var a string = "Greece Ελλάδα"
        for i, c := range a {
            fmt.Printf("%2d %c
    ", i, c)
        }
    }
    

    Playground: https://play.golang.org/p/Fdgg6UMXAAt

    Output:

     0 G
     1 r
     2 e
     3 e
     4 c
     5 e
     6  
     7 Ε
     9 λ
    11 λ
    13 ά
    15 δ
    17 α
    

    References:

    Go package fmt documentation.

    The Go Blog: Strings, bytes, runes and characters in Go.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line