字符串循环左|右移实现(C|C++)
程序员文章站
2022-03-08 14:17:39
...
一、字符串循环右移K位
(1)图解思考
(2)代码实现
- 时间复杂度O(n) | 空间复杂度O(1)
// 三次翻转实现
#include <iostream>
#include <cstring>
void reverse(char str[],int start,int end){
for( ;start < end; start++,end--){
char tmp = str[start];
str[start] = str[end];
str[end] = tmp;
// start++;
// end--;
}
}
void rotateStrRight(char str[], int offset,int len){
if(str == nullptr || len == 0){
return;
}
offset = offset % len;
// 三次翻转
reverse(str, 0, len-offset-1);
reverse(str, len-offset, len-1);
reverse(str, 0, len-1);
}
int main(){
int steps = 2;
char str[] = "12ab";
int len = strlen(str);
//printf("len = %d\n",len);
printf("移动前: %s\n", str);
rotateStrRight(str,steps,len);
printf("移动后:%s\n", str);
}
二、字符串循环左移K位
(1)说明
# 字符串循环左移
(1)左移与右移同理,只是划分段的方向相反,交换区间自然有区别
(2)例如:1234ab,循环左移4位(从左划分)
(3)1234|ab -> 4321|ab -> 4321|ba -> ab1234
(4)例如:1234ab,循环右移4位
(5)12|34ab -> 21|34ab -> 21|ba43 -> 34ab12
(2)代码实现
// 三次翻转实现
#include <iostream>
#include <cstring>
void reverse(char str[],int start,int end){
for( ;start < end; start++,end--){
char tmp = str[start];
str[start] = str[end];
str[end] = tmp;
}
}
void rotateStrLeft(char str[], int offset,int len){
if(str == nullptr || len == 0){
return;
}
offset = offset % len;
// 三次翻转
reverse(str, 0, offset-1);
reverse(str, offset, len-1);
reverse(str, 0, len-1);
}
int main(){
int steps = 3;
char str[] = "1234ab"; // 4ab123
int len = strlen(str);
//printf("len = %d\n",len);
printf("移动前: %s\n", str);
rotateStrLeft(str,steps,len);
printf("移动后:%s\n", str);
}
三、循环左右移结果相同条件
(1)str.length / 2 = offset
(2)测试结果(8/2 = 4)
上一篇: C++怎样打开网页?
下一篇: 批处理批量打开网页
推荐阅读
-
jquery实现两边飘浮可关闭的对联广告_jquery
-
CSS3 实现的一个简单的"动态主菜单" 示例[转]_html/css_WEB-ITnose
-
表头固定(利用jquery实现原理介绍)_jquery
-
python实现的守护进程(Daemon)用法实例
-
JavaScript实现的类字典插入或更新方法实例_javascript技巧
-
php使用imagick模块实现图片缩放、裁剪、压缩示例_PHP
-
js和jquery中循环的退出和继续学习记录_javascript技巧
-
javascript实现的使用方向键控制光标在table单元格中切换_javascript技巧
-
javascript实现输出指定行数正方形图案的方法_javascript技巧
-
PHP为表单获取的URL 地址预设 http 字符串函数代码_PHP教程