dse84825 2014-11-05 21:14
浏览 68

如何在Go中将新字符分配给字符串?

I'm trying to alter an existing string in Go but I keep getting this error "cannot assign to new_str[i]"

package main
import "fmt"

func ToUpper(str string) string {
    new_str := str
    for i:=0; i<len(str); i++{
        if str[i]>='a' && str[i]<='z'{
            chr:=uint8(rune(str[i])-'a'+'A')
            new_str[i]=chr
        }
    }
    return new_str
}

func main() {
    fmt.Println(ToUpper("cdsrgGDH7865fxgh"))
}

This is my code, I wish to change lowercase to uppercase but I cant alter the string. Why? How can I alter it?

P.S I wish to use ONLY the fmt package!

Thanks in advance.

  • 写回答

3条回答 默认 最新

  • doufanglian7585 2014-11-05 22:14
    关注

    You can't... they are immutable. From the Golang Language Specification:

    Strings are immutable: once created, it is impossible to change the contents of a string.

    You can however, cast it to a []byte slice and alter that:

    func ToUpper(str string) string {
        new_str := []byte(str)
        for i := 0; i < len(str); i++ {
            if str[i] >= 'a' && str[i] <= 'z' {
                chr := uint8(rune(str[i]) - 'a' + 'A')
                new_str[i] = chr
            }
        }
        return string(new_str)
    }
    

    Working sample: http://play.golang.org/p/uZ_Gui7cYl

    评论

报告相同问题?

悬赏问题

  • ¥15 蓝桥oj3931,请问我错在哪里
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染