把一个字符串左旋k个字符的2种方法
程序员文章站
2023-12-21 16:28:58
...
第一种是一个字符一个字符的左移,把第一个字符存临时变量里面,把后面的字符每一个往前移动一个位置,‘\0’不移动,然后把临时变量的值放在‘\0’前面的位置。这样重复k次;
第二种是把需要左移的k个字符逆序,再把剩下的字符逆序,最后再把整体逆序,就得到我们想要的结果了。
第一种方法的实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void left_move(char*p,int k)
{
int i = 0;
int j = 0;
int len = strlen(p);
for (j = 0; j < k;j++)
{
//循环k次
char tmp = *p;
//把剩下的字符向前移动一个位置,'\0'不动
for (i = 0; i < len-1; i++)
{
*(p+i) = *(p + i + 1);
}
*(p + len - 1)= tmp;
}
}
int main()
{
char arr[] = "abcdef";
int key = 3;
left_move(arr,3);
printf("%s \n", arr);
system("pause");
return 0;
}
第二种方法的实现:
//用字符串逆序实现旋转
void reveres_arr(char*left, char*right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
char* left_move(char*str, int k)
{
int len = strlen(str);
//逆序需要左旋转的k字符串
reveres_arr(str, str + k - 1);
//逆序剩下的字符串
reveres_arr(str + k, str + len - 1);
//逆序整个字符串
reveres_arr(str, str + len - 1);
}
int main()
{
char arr[] = "abcdef";
int key = 3;
left_move(arr,3);
printf("%s \n", arr);
system("pause");
return 0;
}