程式設計實現字串的迴圈右移
阿新 • • 發佈:2019-02-11
例題:輸入一個字串和一個整數,輸出右移後的字串。例如輸入字串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; }