<编程珠玑>向量旋转(旋转交换) 第三种方法实现代码, 杂耍,其实也没那么容易出错.

原创
2013/07/31 06:14
阅读数 375

由于再次看到之前自己分享的 关于 <编程珠玑> 里 向量旋转(旋转交换)的相关代码.  发现无人关注. 网络上搜索相关 实现代码,发现 又长又晦涩. 不易理解. 这里对之前的分享重新修改,最主要区别是,不计算最小公倍数,改用记录移动次数作为循环结束点.力求简单明了.希望有相关学习的同学发表自己的看法. 

/*转载请注明出处.*/
#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);
}
 
编码,学习, 都是辛苦活, 写文章,发共享,没人发工资. 请转载的朋友注明出处.  不要做伸手党.
展开阅读全文
打赏
0
4 收藏
分享
加载中
更多评论
打赏
0 评论
4 收藏
0
分享
返回顶部
顶部