左旋转字符串与右旋转字符串
一、 关于左旋转与右旋转操作:
定义字符串的左旋转操作:把字符串前面的几个字符移动到字符串后面去,比如"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 ", 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 ", arr); return 0; }
四、图片解析旋转原理
五、在《程序员编程艺术》这本书中有详细的各种解法,可以参考
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C语言实现字符串的左旋转
- 下一篇: 旋转字符串