1.暴力求解法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void left_move(char* arr, int k)
{
int i = 0;
for (i = 0; i < k; i++)
{
int len = strlen(arr);
int tmp = *arr;//1.先把arr第一个元素拿出来
int j = 0;
for (j = 0; j < len - 1; j++)//2.把后面的字符往前挪一个字符
{
*(arr + j) = *(arr + j + 1);
}
*(arr + len - 1) = tmp;//3.最后把第一个字符放到最后面
}
}
int main()
{
char arr[] = "abcdef";
left_move(arr, 2);
printf("%s\n", arr);
return 0;
}
2.解法优化
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <assert.h>
void revese(char* left, char* right)
{
while (right>left)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char* arr, int k)
{
assert(arr != NULL);
int len = strlen(arr);
assert(k < len);
revese(arr, arr + k - 1);//
revese(arr + k, arr + len - 1);//ұ
revese(arr, arr + len - 1);//ַ
}
int main()
{
char arr[] = "abcdef";
left_move(arr, 2);
printf("%s\n", arr);
return 0;
}