【练习】左旋转字符串

/************************************************************************/
/* 左旋转字符串
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n 的字符串操作的复杂度为O(n),辅助内存为O(1)。                                                                     
*/
/************************************************************************/

#include <iostream>

using namespace std;

void Reverse(char *begin,char* end)
{
	char temp;
	while(begin<end)
	{
		temp=*begin;
		*begin=*end;
		*end=temp;
		begin++;
		end--;
	}
	
}
char* LeftReverse(char *p,int n)
{

	int length=strlen(p);
	Reverse(p,p+n-1);
	Reverse(p+n,p+length-1);
	Reverse(p,p+length-1);
	return p;
}
int main()
{
	char p[]="abcdef";//此处不能定义为char* p="abcdef",因为char* p="abcdef"定义的是一个字符串常量,即const char类型的数组,其值不能被修改
//详细分析可见http://apps.hi.baidu.com/share/detail/33344482	
	puts(LeftReverse(p,3));

	return 0;
}

  

posted @ 2011-11-23 14:28  refazy  阅读(174)  评论(0编辑  收藏  举报