您的位置:首页 > 其它

实现一个函数,可以左旋字符串中的k个字符

2015-11-25 13:42 344 查看
实现一个函数,可以左旋字符串中的k个字符
例如:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: