左旋转字符串与右旋转字符串
2016-12-09 17:11
309 查看
一、 关于左旋转与右旋转操作:
定义字符串的左旋转操作:把字符串前面的几个字符移动到字符串后面去,比如"ABCDEFGHI",左旋转2位得到"CDEFGHIAB";
同样右旋转操作:把字符串后面的几个字符移动到字符串前面去,比如“ABCDEFGHI”右旋转2位得到“HIABCDEFG”;
二、对于左旋转的实现
三、对于右旋转的实现:
四、图片解析旋转原理
![](https://oscdn.geek-share.com/Uploads/Images/Content/201612/09/1bbe2c1735084b66b42c9c7d8490397e)
五、在《程序员编程艺术》这本书中有详细的各种解法,可以参考
定义字符串的左旋转操作:把字符串前面的几个字符移动到字符串后面去,比如"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; }
四、图片解析旋转原理
五、在《程序员编程艺术》这本书中有详细的各种解法,可以参考