实现一个函数,可以左旋字符串中的k个字符
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
或者右旋
ABCD右旋一个字符得到DABC
ABCD右旋两个字符得到CDAB
左旋字符
void left_move(char* arr, int k) //左旋字符
{
int i = 0;
int len = strlen(arr);
for (i = 0; i < k; i++)
{
char t = *arr;
int j = 0;
for (j = 0; j < len-1; j++)
{
*(arr+j) = *(arr +j+ 1);//将第1个字符以后的都向前移动
}
arr[len-1] = t;//此时已完成移位arr[len-2]和arr[len-1]都是之前最后一个的字符,然后就可以将arr[len-1]赋成移位前的首字符
}
}
右旋字符
void right_move(char* arr, int k)//右旋字符
{
int i = 0;
int len = strlen(arr);
for (i = 0; i < k; i++)
{
char t = *(arr+len-1);
int j = 0;
for (j = 0; j < len - 1; j++)
{
*(arr + len-1-j) = *(arr+len-2-j);
}
arr[0] = t;
}
}
三部翻转法
ab cdef 两部分翻转一下
ba fedc 整体再逆序
cdefab
void reverse(char* arr,int d)
{
char* left = arr;
char* right = arr + d - 1;
while (left<right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_move(char* arr, int k)
{
int len = strlen(arr);
reverse(arr,k);//逆序左边
reverse(arr+k,len-k);//逆序右边
reverse(arr,len);//逆序整体
}
main
int main()
{
char arr[] = "ABCDEFGHI";
int i = 0;
printf("please enter a number:>");
scanf("%d", &i);
// left_move(arr,i);
// right_move(a, i);
printf("%s", arr);
return 0;
}