【问题标题】:cannot assign to v[i], reference to array problem?无法分配给 v[i],引用数组问题?
【发布时间】:2020-05-23 00:11:15
【问题描述】:

我正在尝试解决一个难题来练习我的围棋。但是,我有点卡住了,这个错误不是很有帮助。

./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

【问题讨论】:

标签: go


【解决方案1】:

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

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

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

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

然后你可以赋值给v的元素,当你完成后,将它转换回字符串:

str:=string(v)

【讨论】:

  • 啊,当然。那讲得通。感谢您的帮助:)
【解决方案2】:

如果要执行该操作,则必须将单词从字符串转换为 []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, " ")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多