douan7529 2018-11-11 00:41
浏览 57
已采纳

如何在GO中操纵字符串以反转它们?

I'm trying to invert a string in go but I'm having trouble handling the characters. Unlike C, GO treats strings as vectors of bytes, rather than characters, which are called runes here. I tried to do some type conversions to do the assignments, but so far I could not.

The idea here is to generate 5 strings with random characters of sizes 100, 200, 300, 400 and 500 and then invert their characters. I was able to make C work with ease, but in GO, the language returns an error saying that it is not possible to perform the assignment.

 func inverte() {
    var c = "A"
    var strs, aux string

    rand.Seed(time.Now().UnixNano())
    // Gera 5 vetores de 100, 200, 300, 400, e 500 caracteres
    for i := 1; i < 6; i++ {
        strs = randomString(i * 100)
        fmt.Print(strs)

        for i2, j := 0, len(strs); i2 < j; i2, j = i+1, j-1 {
           aux = strs[i2]
           strs[i2] = strs[j]
           strs[j] = aux
       }
   }
}
  • 写回答

1条回答 默认 最新

  • doulu6234 2018-11-11 00:45
    关注

    As you correctly identified, go strings are immutable, so you cannot assign to rune/character values at given indices.

    Instead of reversing the string in-place one must create a copy of the runes in the string and reverse those instead, and then return the resulting string.

    For example (Go Playground):

    func reverse(s string) string {
      rs := []rune(s)
      for i, j := 0, len(rs)-1; i < j; i, j = i+1, j-1 {
        rs[i], rs[j] = rs[j], rs[i]
      }
      return string(rs)
    }
    
    func main() {
      fmt.Println(reverse("Hello, World!"))
      // !dlroW ,olleH
      fmt.Println(reverse("Hello, 世界!"))
      // !界世 ,olleH
    }
    

    There are problems with this approach due to the intricacies of Unicode (e.g. combining diacritical marks) but this will get you started.

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

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘