码迷,mamicode.com
首页 > 其他好文 > 详细

编程珠玑字符串反转

时间:2015-05-05 00:06:46      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:c++   编程   编程珠玑第二版   数据反转   

编程珠玑真是一本让人感觉到眼前一亮的书,虽然书不厚,但是里面的知识很贴近实际应用,也很有启发性,如果能真正的消化里面的内容,对程序的理解肯定会上一个档次。

本文给出的是第二章习题的第五题的大概程序!

#include<iostream>
using namespace std;

void move(int * arr, int arrsize,int n);//将数组arr的前n个元素左移
void show(int * arr,int arrsize);
void reverse(int * arr, int n, int m);
void move_re(int * arr, int arrsize, int n);
void move_re_twodif(int * arr, int arrsize, int n, int m);//把数组的前n个元素和后m个元素交换位置
int main()
{
	int arr[] = { 20, 15, 26, 302, 150, 264, 154, 284 };
	show(arr, 8);
	cout << endl;
	move_re(arr,8, 6);
	show(arr,8);
	move_re_twodif(arr, 8, 5, 3);
	show(arr, 8);
	return 0;
}

void move(int * arr,int arrsize, int n)
{
	int i = 0;
	int k = n%arrsize;
	for (; i <k; ++i)
	{
		int temp = arr[i];
		int m = i+k;
		while ( m < arrsize)
		{
			arr[m-k] = arr[m]; m+= k;
		}
		//if (m>=arrsize) 
		arr[m-k] = arr[m%arrsize];
		show(arr, arrsize);
	}
}

void show(int * arr,int arrsize)
{
	int n = 0;
	while (n<arrsize)
	{
		cout << *(arr+n) << "\t"; ++n;
	}
		cout<<endl;
}

void reverse(int * arr, int n, int m)
{
	if (n >= m)return;
	int i = n;
	int j = m;
	for (; i < j;)
	{
		int temp = arr[i];
		arr[i++] = arr[j];
		arr[j--] = temp;
	}
}
void move_re(int * arr, int arrsize, int n)
{
	int k = n%arrsize;
	reverse(arr, 0, k - 1);
	reverse(arr, k, arrsize - 1);
	reverse(arr, 0, arrsize - 1);
}

void move_re_twodif(int * arr, int arrsize, int n, int m)//把数组的前n个元素和后m个元素交换位置
{
	if ((arrsize - m) < n)return;//如果后半段数据和前半段数据重叠就停止交换
	reverse(arr, 0, n - 1);
	reverse(arr, n, arrsize-m-1);
	reverse(arr, arrsize - m, arrsize - 1);
	reverse(arr, 0, arrsize - 1);
}
如有转载请说明出处!

编程珠玑字符串反转

标签:c++   编程   编程珠玑第二版   数据反转   

原文地址:http://blog.csdn.net/shiwazone/article/details/45486643

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!