左旋转字符串与右旋转字符串
来源:互联网 发布:计算机算法书籍推荐 编辑:程序博客网 时间: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
- 左旋转字符串与右旋转字符串
- 每天一题(47) - 旋转单词顺序 + 左旋转字符串 + 右旋转字符串
- 字符串操作:左旋转字符串,右旋转字符串,判断一个字符串是否是另一个字符串旋转所得
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 26.左旋转字符串
- 第一章、左旋转字符串
- 字符串的左旋转
- 第一章、左旋转字符串
- 第一章、左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 26、左旋转字符串
- 左旋转字符串
- 左旋转字符串
- windows socket编程中 listen()的backlog参数和未完成队列、已完成队列的关系
- Codeforces Round #382 (Div. 2) E. Ostap and Tree
- 双11背后的网络自动化技术
- Python--Nginx
- C++ ADO操作mysql数据库
- 左旋转字符串与右旋转字符串
- Drive Strength && tri-state相关概念
- 设计模式六大原则
- Centos7安装配置NFS服务和挂载
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- 企业弱密码问题该如何解决?
- 机器学习之决策树和随机森林及代码示例
- 为啥一个java文件只能有一个public类
- Qt 模态对话框与非模态对话框及生命周期