第一种方法 :每次保存第一个字母,然后其余字母一次左移。再把第一个字母放在最后一个位置上
代码:
void left_reverse(char*arr, int len, int k)
{
/*assert(arr);
assert(k > 0);
Swap(arr,arr+k-1);
Swap(arr+k,arr+len-1);
Swap(arr,arr+len-1);*/
while (k--)
{
char tmp = arr[0];
for (size_t i = 0; i < len; i++)
{
arr[i] = arr[i + 1];
}
arr[len - 1] = tmp;
}
}
int main()
{
char arr[] = "qwerty";
int len = strlen(arr);
right_reverse(arr,len,2);
printf("%s\n",arr);
system("pause");
}
第二种方法:三步旋转法
代码:
void Swap(char* start, char*end)
{
while (start < end)
{
*start ^= *end;
*end ^= *start;
*start ^= *end;
start++;
end--;
}
}
void right_reverse(char*arr, int len, int k)
{
assert(arr);
assert(k > 0);
Swap(arr,arr+k-1);
Swap(arr+k,arr+len-1);
Swap(arr,arr+len-1);
}
int main()
{
char arr[] = "qwerty";
int len = strlen(arr);
right_reverse(arr,len,2);
printf("%s\n",arr);
system("pause");
}