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

无法分配给 v[i],引用数组问题?

无法分配给 v[i],引用数组问题?

Go
GCT1015 2022-06-06 15:09:17
我正在尝试解决一个难题来练习我的围棋。但是,我有点卡住了,这个错误不是很有帮助。./prog.go:22:23: 不能分配给 v[j]./prog.go:22:23: 不能分配给 v[wLen - 1 - j]func SpinWords(str string) string {    ws := strings.Split(str, " ")    for i := 0; i < len(ws); i++ {        v := ws[i]        wLen := len(v)        if wLen > 4 {            for j := 0; j < wLen/2; j++ {                v[j], v[wLen-1-j] = v[wLen-1-j], v[j]            }            ws[i] = v        }    }    return strings.Join(ws, " ")}这里几乎可以工作的代码:https: //play.golang.org/p/j9BYk642bFa
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

您不能分配给 of 的元素,v因为v它是一个字符串,而字符串是不可变的。您可以将字符串转换为[]byte第一个,然后使用它的元素,但如果您的字符串包含多字节字符,则不安全。

v:=[]byte(ws[i])

或者您可以将字符串转换为 a[]rune并使用它:

v:=[]rune(ws[i])

然后您可以分配给 的元素v,完成后,将其转换回字符串:

str:=string(v)


查看完整回答
反对 回复 2022-06-06
?
慕容3067478

TA贡献1773条经验 获得超3个赞

如果要执行该操作,则必须将单词从字符串转换为 []rune


此代码有效:)


package main


import (

    "fmt"

    "strings"

)


func main() {

    result := SpinWords("Welcome to the jungle we got fun and games")


    fmt.Println(result)

}


func SpinWords(str string) string {

    ws := strings.Split(str, " ")

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

        v := ws[i]

        wLen := len(v)


        if wLen > 4 {

            vinrune := []rune(v)

            for j := 0; j < wLen/2; j++ {

                vinrune[j], vinrune[wLen-1-j] = vinrune[wLen-1-j], vinrune[j]

            }

            v = string(vinrune)

            ws[i] = v

        }

    }


    return strings.Join(ws, " ")

}


查看完整回答
反对 回复 2022-06-06
  • 2 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

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