例如一个字符串长度为6,左旋2次。那么把字符串前两个定义为左部分,剩余定义为右部分。
void reverse(char* left, char* right)
{
assert(left && right);
while (left<right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char* str, int k)
{
int len = strlen(str);
k %= len;
//左边逆序
reverse(str, str+k-1);
//右边逆序
reverse(str+k, str + len - 1);
//整体逆序
reverse(str, str + len-1);
}
int main()
{
char arr[] = "abcdef";
//bafedc
//cdefab
int k = 0;
scanf("%d", &k);//10%6=4
left_move(arr, k);
printf("%s\n", arr);
return 0;
}