假设字符串char arr[]=“ABCDEFG”,需要左旋的个数k=3,左旋3次后变成DEFGABC,先将要左旋的前三个家伙逆序(CBADEFG),然后将后半段也逆序(CBAGFED),最后整体逆序(DEFGABC)即可。这样只需要做数值交换即可,可以写一个函数帮我们完成局部逆序,代码如下:
void reverse_part(char* ret, int start, int end)
{
int i, j;
for (i = start, j = end; i < j; i++, j--)
{
char temp = ret[i];
ret[i] = ret[j];
ret[j] = temp;
}
}
void leftRound(int* str, int time)
{
assert(str);
int len = strlen(str);
int pos = time % len;
reverse_part(str, 0, pos - 1);//逆序前段 ABC>>CBA
reverse_part(str, pos, len - 1);//逆序后段 DEFG >> GFED
reverse_part(str, 0, len - 1);//整体逆序
}
int main()
{
char arr[] = "ABCDEFG";
int time = 0;
printf("请输入你要逆序的个数\n");
scanf("%d", &time);
leftRound(arr, time);
printf("%s", arr);
return 0;
}