可以通过循环的方式来实现,旋转就外循环就循环几次,然后让内层循环循环字符串的字符个数减一次就好了。每次讲第一个字符取出,其余字符依次前移,最后把第一个字符放在最后面,实现左移。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void left_spin(char a[], int k)
{
int i = 0;
for (i = 0; i < k; i++)
{
int j = 0;
char tmp = a[0];
for (j = 0; j < strlen(a) - 1; j++)
{
a[j] = a[j + 1];
}
a[j] = tmp;
}
}
int main()
{
char a[] = "AABCD";
int k = 0;
printf("请输入要左旋的字母个数:\n");
scanf("%d", &k);
left_spin(a, k);
printf("%s\n", a);
system("pause");
return 0;
}
也可以用这种方式实现,比如说AABCD要旋转3个字符,可以先让前三个字符逆序,逆序后字符串为BAACD,再让后俩个字符逆序,逆序后字符串为BAADC,最后让整个字符串逆序,为CDAAB实现了我么娘要的结果。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char *left, char *right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void left_spin(char a[], int n)
{
char *str = a;
int k = strlen(a);
reverse(str, str+n-1);
reverse(str+n, str+k-1);
reverse(str, str+k-1);
}
int main()
{
char a[] = "AABCD";
int n = 0;
printf("请输入要左旋的字母个数:\n");
scanf("%d",&n);
left_spin(a,n);
printf("%s\n",a);
system("pause");
return 0;
}