1. 程式人生 > >程式設計實現字串的迴圈右移

程式設計實現字串的迴圈右移

例題:輸入一個字串和一個整數,輸出右移後的字串。例如輸入字串str=“1234567”, 整型n=3,輸出字串str=“5671234”。

思想:step1.生成一個輔助陣列temp[n]存放要前移的部分“567”。

         step2.將沒有前移的部分從後向前依次向後移動。str變成“1231234”。

          step3.將輔助陣列中的字元覆蓋str前n位。str變成“5671234”。

char* Move(char *s, int n)
{
    assert(s!=NULL);
    int length=strlen(s);
    if(n%length==0)//移動為長度的倍數相當於沒移動
        return s;
    char *t=s;
    char *temp=(char *)malloc(n);
    //t指標指向末尾最後一個字元
    while(*t){
        t++;
    }
    t--;
    //strlen函式實際上做了一次迴圈,這裡其實可以用t-s+1得出length
    n=n%length;
    //將原字串要提前的先儲存進temp陣列中
    for(int i=0;i<n;i++)
    {
        temp[i]=*(t-n+1+i);
    }
    //將原字串要往後挪的字元從後往前依次向後挪n個位置
    for(int i=0;i<(length-n);i++){
        *(t-i)=*(t-n-i);
    }
    //將temp陣列中的字串覆蓋原字串的前n個位置
    for(int i=0;i<n;i++){
        s[i]=temp[i];
    }
    //釋放堆記憶體
    free(temp);
    return s;

}
int main(){
    char str[100]="";
    int n=0;
    scanf("%s %d",str,&n);
    Move(str,n);
    cout<<str;
    return 0;
}