因爲再次看到以前本身分享的 關於 <編程珠璣> 裏 向量旋轉(旋轉交換)的相關代碼. 發現無人關注. 網絡上搜索相關 實現代碼,發現 又長又晦澀. 不易理解. 這裏對以前的分享從新修改,最主要區別是,不計算最小公倍數,改用記錄移動次數做爲循環結束點.力求簡單明瞭.但願有相關學習的同窗發表本身的見解. 編程
/*轉載請註明出處.*/ #include <stdio.h> #include <stdlib.h> #include <string.h> void f(char*,int); int main(int argc, char *argv[]) { char *a; /* 被操做的字符串 */ int step; /* 移位位置 */ if(argc < 3) { printf("%s%s%s\n", "usage: ", argv[0], " string number\n"); return -1; } a = argv[1]; step = atoi(argv[2]); f(a,step); printf("%s\n", a); } void f(char *a, int step){ int i=0, j=0; int n; /* 字符串長度 */ int tmp; /* 臨時存儲區域 */ int movenum = 0; /* 總共移動次數 */ n = strlen(a) / sizeof(char); step = step % n; if(!step) return; while(movenum < n) { tmp = a[i]; j = i; while(((j+step)%n) != i) { a[j] = a[((j+step)%n)]; movenum++; j = ((j+step)%n); } a[j] = tmp; movenum++; i++; } //printf("strlen: %d step: %d move: %d\n", n, step, movenum); }編碼,學習, 都是辛苦活, 寫文章,發共享,沒人發工資. 請轉載的朋友註明出處. 不要作伸手黨.