题目:实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

方法一:直接旋转 void left_move(chararr, int k)//左旋字符串 { char tmp = 0; charp = arr; while (k!=0) { tmp =p; while ((p+1) != '\0') { *p = *(p + 1); p++; } *p = tmp; k--; } }

方法二: void left_move2(char*arr, int k)//更优解法 //要旋转三次分三步abcdef==》defabc //1.先旋转前面k个==》cbadef //2.再转后面的剩余部分==》cbafed //3.整体旋转==》defabc { int len = strlen(arr); void Reverse(left, right); Reverse(arr, arr + k - 1); Reverse(arr + k, arr + len - 1); Reverse(arr, arr + len - 1); }

void Reverse(charleft, charright) { char tmp = 0; while (left < right) { tmp = *left; *left = *right; *right = tmp; left++; right--; } }

int main() { int k = 2; char arr[] = "abcd"; int len = strlen(arr); /left_move(arr, 2);/ int left = arr; int right = arr + len - 1; left_move2(arr, k); printf("%s", arr);

system("pause");
return 0;

}