Title: Implement a function that can left-rotate k characters in a string
Requirement: Left-rotate abcd by one character to get bcda
abcd rotate two characters to the left to get cdab
Method ①: Create temporary variables
#include<stdio.h>
void left_move(char arr[], int k)
{
int len = strlen(arr);
int j = 0;
for (j = 0; j < k%len; j++)//移动一组字符 %len移动余数 例 输入8 只移动2个
{
//一个字符的移动
char tmp = arr[0];//创建临时变量储存先取走的字符
int i = 0;
for (i = 0; i < len - 1; i++)
{
//将字符串后面的元素向前移动
arr[i] = arr[i + 1];
}
arr[len - 1] = tmp;
}
}
int main()
{
//左旋转字符代码
char arr[] = "abcdef";
int k = 0; //假如逆序k个元素
scanf("%d", &k);
left_move(arr, k);
printf("%s", arr);
return 0;
}
Method ②: Reverse string method
#include<stdio.h>
void revese(char* left , char* right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char arr[], int k)
{
int len = strlen(arr);
k %= len;//防止越界访问,所以取余数
revese(arr, arr + k - 1);
revese(arr + k, arr + len - 1);
revese(arr, arr + len - 1);
}
int main()
{
//左旋转字符代码
char arr[] = "abcdef";
//逆序字符串的方法
//abcdef 假设k=2
//ba fedc 先把前两个逆序 再把后四个逆序
//cdef ab 然后再把这两组逆序
int k = 0;
scanf("%d", &k);
left_move(arr, k);
printf("%s", arr);
return 0;
}