您的位置:首页 > 其它

左旋转字符串与右旋转字符串

2016-12-09 17:11 309 查看
一、 关于左旋转与右旋转操作:

定义字符串的左旋转操作:把字符串前面的几个字符移动到字符串后面去,比如"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;
}


四、图片解析旋转原理



五、在《程序员编程艺术》这本书中有详细的各种解法,可以参考
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: