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

来源:互联网 发布:计算机算法书籍推荐 编辑:程序博客网 时间:2024/05/18 01:39


一、 关于左旋转与右旋转操作:

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

四、图片解析旋转原理


五、在《程序员编程艺术》这本书中有详细的各种解法,可以参考


0 0
原创粉丝点击