实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
下面给出两种不同的方法:
#include<stdio.h>
#include<stdlib.h>
void swap(char arr[],int z,int k)
{
int s = k;
for (int i = 0; i < k; i++)
{
char t = arr[i];
arr[i] = arr[z - 1 - s];
arr[z - 1 - s] = t;
s--;
}
}
int main()
{
char arr[] = "ABCD";
int z = sizeof(arr) / sizeof(arr[0]);
int k;
printf("请输入要左旋的字符个数:");
scanf("%d", &k);
swap(arr, z, k);
printf("旋转后的结果为:");
for (int j = 0; j < z-1; j++)
{
printf("%c", arr[j]);
}
system("pause");
return 0;
}
上面这种方法是
#include<stdio.h>
int len(char arr[])
{
int i;
for ( i = 0; arr[i] != '\0'; i++)
;
return i;
}
void reverse(char *p, char *q)
{
while (p < q)
{
char t = *p;
*p = *q;
*q = t;
p++;
q--;
}
}
void turn(char arr[], int n)
{
reverse(arr, arr + n - 1);
reverse(arr + n, arr + len(arr) - 1);
reverse(arr, arr + len(arr) - 1);
}
int main()
{
char arr[] = "abcdef";
turn(arr, 1);
printf("%s", arr);
system("pause");
return 0;
}
这种方法比较巧妙的运用了一些规律: