交换两个字符串(Golang)

我目前正在学习 Golang,我决定编写一些简单的算法来学习语法。我希望它还没有答案,但我没有找到它..


我有交换字符串的问题


func swap(str1, str2 string) {

    /*

     * Also possible :

     * str1, str2 = str2, str1

     */

    // str1, str2 = str2, str1

    tmp := str1

    str1 = str2

    str2 = tmp

}


func main() {

    a := "World !"

    b := "Hello"

    swap(a, b)

    fmt.Printf("a=%s\nb=%s\n", a, b)

}

为什么这段代码不起作用?


猛跑小猪
浏览 318回答 3
3回答

一只名叫tom的猫

交换str1andstr2不会改变aand b,因为它们是aand 的副本b。使用指针:func swap(str1, str2 *string) {    *str1, *str2 = *str2, *str1}func main() {    a := "salut"    b := "les gens"    swap(&a, &b)    fmt.Printf("a=%s\nb=%s\n", a, b)}http://play.golang.org/p/Qw0t5I-XGT

拉丁的传说

这将是惯用的方式。package mainimport "fmt"func swap(a, b string)(string, string) {    return b, a}func main() {    f, s := swap("world" , "hello")    fmt.Println(f, s)}

慕仙森

内置类型作为函数参数是按值传递的,但是如果元素被解引用会修改原来的值,比如slice、map。例如package mainimport (    "bytes"    "fmt"    "strings")func f_1(a int) {    a = 2}func f_1_1(a *int) {    *a = 2}func f_2(s string) {    s = "cba"}func f_2_1(s *string) {    *s = "cba"}func f_3(v []string) {    v[0] = "haha"}func f_3_1(v []string) {    v = nil}func f_3_2(v *[]string) {    *v = nil}func f_4(m map[int]int) {    m[1] = 3    m[3] = 1}func f_4_1(m map[int]int) {    m = nil}func f_4_2(m *map[int]int) {    *m = nil}func f_5(b []byte) {    b[0] = 0x40}func f_5_1(b []byte) {    b = bytes.Replace(b, []byte("1"), []byte("a"), -1)}func f_5_2(b *[]byte) {    *b = bytes.Replace(*b, []byte("1"), []byte("a"), -1)}type why struct {    s []string}func (ss why) SetV(s []string) {    ss.s = s}func (ss *why) SetP(s []string) {    ss.s = s}func (ss why) String() string {    return strings.Join(ss.s, ",")}func main() {    a := 1    s := "abc"    v := []string{"sd", "aa"}    m := map[int]int{1: 1, 2: 2, 3: 3}    f_1(a)    f_2(s)    f_3(v)    f_4(m)    fmt.Printf("%d,%s,%v,%v\n", a, s, v, m)    f_3_1(v)    f_4_1(m)    fmt.Printf("%d,%s,%v,%v\n", a, s, v, m)    f_1_1(&a)    f_2_1(&s)    f_3_2(&v)    f_4_2(&m)    fmt.Printf("%d,%s,%v,%v\n", a, s, v, m)    b := []byte("12145178")    f_5(b)    fmt.Printf("%s\n", b)    f_5_1(b)    fmt.Printf("%s\n", b)    f_5_2(&b)    fmt.Printf("%s\n", b)    ss := &why{}    ss.SetV([]string{"abc", "efg"})    fmt.Println(ss)    ss.SetP([]string{"abc", "efg"})    fmt.Println(ss)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go