1. 程式人生 > >左旋轉字串與右旋轉字串

左旋轉字串與右旋轉字串

一、 關於左旋轉與右旋轉操作:

定義字串的左旋轉操作:把字串前面的幾個字元移動到字串後面去,比如"ABCDEFGHI",左旋轉2位得到"CDEFGHIAB";

同樣右旋轉操作:把字串後面的幾個字元移動到字串前面去,比如“ABCDEFGHI”右旋轉2位得到“HIABCDEFG”;

二、對於左旋轉的實現

void reverse(char *left, char *right)
{
	assert((left != NULL)&&(right != NULL));
	while(left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;

	}

}
void LeftLoopMove(char *pStr, unsigned short steps)
{
	int len = strlen(pStr);
	assert(pStr);
	reverse(pStr, pStr+steps-1);    //逆序前半部分
	reverse(pStr+steps, pStr+len-1);   //逆序後半部分
	reverse(pStr, pStr+len-1);	 //整體逆序
}

int main()
{
	char arr[] = "abcdefghi";
	LeftLoopMove(arr,2);
	printf("%s\n", arr);
	return 0;
}

三、對於右旋轉的實現:
void reverse(char *left, char *right)
{
	assert((left != NULL)&&(right != NULL));
	while(left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;

	}

}
void RightLoopMove(char *pStr, unsigned short steps)
{
	int len = strlen(pStr);
	assert(pStr);
	reverse(pStr, pStr+len-1);	 //整體逆序
	reverse(pStr, pStr+steps-1);    //逆序前半部分
	reverse(pStr+steps, pStr+len-1);   //逆序後半部分
}

int main()
{
	char arr[] = "abcdefghi";
	RightLoopMove(arr,2);
	printf("%s\n", arr);
	return 0;
}

四、圖片解析旋轉原理


五、在《程式設計師程式設計藝術》這本書中有詳細的各種解法,可以參考