区块链研习社我爱编程

字符串循环左移

2018-05-25  本文已影响8人  ccup区块链

问题描述:给定一个字符串,将若干个字符移动到该字符串尾部
例:1234abc将前四个字符移动到尾部,输出abc1234

思路

golang代码如下:(三步反转)

//三步翻转
func stringRevote(start, end int, str []byte) {

    if start < 0 || end > len(str)-1 {
        log.Fatal("起始位置或终止位置错误")
    }
    //golang中切片是传址
    for start < end {
        //第一个跟最后一个换
        str[start], str[end] = str[end], str[start]
        //起始点向后移动
        start++
        //终止点向前移动
        end--
    }
}

func main() {
    var s []byte
    var end int
    fmt.Println("请输入字符串:")
    fmt.Scanf("%s", &s)

    fmt.Println("请输入移动几个字符:")
    fmt.Scanf("%d", &end)

    stringRevote(0, end-1, s)
    fmt.Printf("%s\n", s)

    stringRevote(end, len(s)-1, s)
    fmt.Printf("%s\n", s)

    stringRevote(0, len(s)-1, s)
    fmt.Printf("%s\n", s)

}

分部拷贝,交换

func stringRotation(s string, index int) string {
    if index > len(s) {
        return "error:index超出长度"
    }
    sb := []byte(s)
    //截取两部分,temp暂存前半部分,即将旋转到后半部分位置
    temp := sb[:index]
    //sb切割掉前半部分,重新赋值为后半部分
    sb = sb[index:]
    //将前半部分的值,正序追加到sb尾部
    for i := 0; i < index; i++ {
        sb = append(sb, temp[i])
    }
    return string(sb)

}

上一篇下一篇

猜你喜欢

热点阅读