常规思路就是字符串整体移动,最后一个字符存入临时变量中去,旋转几下就移动几次。这里介绍一种诡异的方法,通过三次旋转完成。先根据旋转偏移量将字符串分成两个模块,各自逆序,最后整个字符串逆序。
ABCDEF 假设旋转4位
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define K 4
void swap(char* pa, char* pb)
{
assert(pa && pb);
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
void reverse1(char* arr, int len)
{
assert(arr);
char* pa = arr;
char* pb = arr + len - 1;
while (pa < pb)
{
swap(pa, pb);
++pa;
--pb;
}
}
int main()
{
char arr[8] = { "ABCDEF" };
int k = K % 6;
reverse1(arr, k);
reverse1(arr + k, 6 - k);
reverse1(arr, 6);
printf("%s\n", arr);
system("pause");
return 0;
}