实现一个函数,可以左旋字符串中的k个字符
2015-11-25 13:42
344 查看
实现一个函数,可以左旋字符串中的k个字符
例如:
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
方法(1):采用循环移位,对需要旋转的k个字符按顺序进行旋转,先将要旋转的一个字符保存起来,将后面的往前挪动一位,再将保存起来的这个字符赋给最后一位,这样连续循环k次,就可以完成了。代码实现如下:
本文出自 “Stand out or Get out” 博客,请务必保留此出处http://jiazhenzhen.blog.51cto.com/10781724/1716689
例如:
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
方法(1):采用循环移位,对需要旋转的k个字符按顺序进行旋转,先将要旋转的一个字符保存起来,将后面的往前挪动一位,再将保存起来的这个字符赋给最后一位,这样连续循环k次,就可以完成了。代码实现如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> void left_move(char *p, int n) { int i; int len = strlen(p); for (i = 0; i < n; i++) { char tmp = p[0]; int j = 0; for (j = 0; j < len - 1; j++) { p[j] = p[j + 1]; } p[len - 1] = tmp; } } int main() { char arr[] = "abcdef"; int n = 0; scanf_s("%d", &n); left_move(arr, n); printf("%s\n", arr); system("pause"); return 0; }方法(2) 三步旋转法,先将要旋转的k个字符串逆序,再将剩余的字符串逆序,最后再对整个字符串逆序就得到了旋转k个字符后的字符串。代码实现如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> void reverse(char *left, char *right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } void left_move(char *p, int n) { int len = strlen(p); reverse(p, p + n - 1); reverse(p + n, p + len - 1); reverse(p, p + len - 1); } int main() { char arr[] = "abcdef"; int n = 0; scanf_s("%d", &n); left_move(arr, n); printf("%s\n", arr); system("pause"); return 0; }分析上面两个方法,方法(1)中至少要循环n*(len-1)次,效率比较低,方法(2)的效率更高一点。
本文出自 “Stand out or Get out” 博客,请务必保留此出处http://jiazhenzhen.blog.51cto.com/10781724/1716689
相关文章推荐
- linux查看 php环境安装路径
- 二叉树学习之二叉查找树 http://blog.csdn.net/callinglove/article/details/40707449
- git command
- android编译分析之8—envsetup.mk
- std::initializer_list in C++0x
- 利用第三方开源框架 PullToRefreshListView 实现下拉刷新(从网上下载图片)
- java acm hdu 2083
- 服务降级
- jquery单选框radio值改变change事件
- JSP中多种include标签的区别?
- DFS&BFS
- 黑马程序员——Collection
- String - 大小比较,范围限制
- JVM垃圾收集算法
- Operating System: Three Easy Pieces --- Evaluating Spin Locks (Note)
- Android开发ScrollView上下左右滑动事件冲突整理一(根据事件)
- 代码调用cmd中的命令
- poj-2749 Building roads
- yii2-用户登录验证
- C语言中函数调用中的传值与传址