目录
题目
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
方法一、左旋转k次每次旋转一个
将字符串旋转1个字符就是先将第一个字符拿出来放到一个临时变量里面,将后面的字符一次向前移动一位,再将之前取出来的第一个字符放到最后一位。
将字符串旋转2个字符就是重复上步骤两次。
//#include<stdio.h>
//#include<string.h>
//void left_move(char arr[], int k)
//{
// int len = strlen(arr);
// int i = 0;
// int tmp = 0;
// for (i = 0; i < k; i++)
// {
// tmp = arr[0];
// int j = 0;
// for (j = 0; j < len - 1; j++)
// {
// arr[j] = arr[j + 1];
// }
// arr[len - 1] = tmp;
// }
//}
//int main()
//{
// char arr[] = "ABCDGHI";
// int k = 0;
// scanf("%d", &k);
// left_move(arr, k);
// printf("%s\n", arr);
// return 0;
//}
方法二、三次逆序字符串
将字符串ABCDGHI左旋2个字符
1.先将前两个字符逆序即BACDGHI
2.再将后面的五个字符逆序即BAIHGDC
3.将字符串整体逆序即CDGHIAB
//#include<stdio.h>
//#include<string.h>
//void reverse(char* left, char* right)
//{
// assert(left && right);
// char tmp = 0;
// while (left < right)
// {
// tmp = *left;
// *left = *right;
// *right = tmp;
// left++;
// right--;
// }
//}
//void left_move(char arr[], int k)
//{
// int len = strlen(arr);
// reverse(arr, arr + k - 1);
// reverse(arr + k, arr + len - 1);
// reverse(arr, arr + len - 1);
//}
//int main()
//{
// char arr[] = "ABCDGHI";
// int k = 0;
// scanf("%d", &k);
// left_move(arr, k);
// printf("%s\n", arr);
// return 0;
//}