因为再次看到以前本身分享的 关于 <编程珠玑> 里 向量旋转(旋转交换)的相关代码. 发现无人关注. 网络上搜索相关 实现代码,发现 又长又晦涩. 不易理解. 这里对以前的分享从新修改,最主要区别是,不计算最小公倍数,改用记录移动次数做为循环结束点.力求简单明了.但愿有相关学习的同窗发表本身的见解. 编程
/*转载请注明出处.*/ #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); }编码,学习, 都是辛苦活, 写文章,发共享,没人发工资. 请转载的朋友注明出处. 不要作伸手党.