题目内容:
实现一个函数,可以左旋字符串中的 k 个字符
例如:
ABCD 左旋一个字符得到 BCDA
ABCD 左旋一个字符得到 CDAB
#include <stdio.h>
#include <string.h>
void swap(char* arr, int start, int end) {
int left = 0;
int right = 0;
//dichotomy swap
int mid = (start + end) / 2;
for (left = start, right = end - 1; left < mid; left++, right--) {
arr[left] = arr[left] ^ arr[right];
arr[right] = arr[left] ^ arr[right];
arr[left] = arr[left] ^ arr[right];
}
}
void move(char* arr, int index) {
int len = (int)strlen(arr);
int mid = (-index) % len;
if (len == 0 || mid == 0) {
return ;
}
if (mid < 0) {
mid += len;
}
//reverse left
swap(arr, 0, mid);
//reverse right
swap(arr, mid, len);
//reverse all
swap(arr, 0, len);
}
int main() {
char arr[] = "abcdef";
printf("开始的值:%s \n", arr);
move(arr, 10);
printf("结束的值:%s \n", arr);
return 0;
}