思路:
把左移的字母先保存,然后使后边的字母依次前移,最后把刚才保存的左移字符赋值后边空了的下标中
#define use _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
void left_rotate (char *arr,int sz,int k) //自定义左旋转函数
{
int i=0;
k=k%sz; //为了防止旋转超过字符串长度
while (k--) //判断需要左移字符是否左移完
{
char temp=arr[0]; //每次把首值存储在临时变量中
for (i=0;i<sz-1;i++)
{
arr[i]=arr[i+1]; //让字符串中内容下标依次前移
}
arr[i]=temp; //把刚存储的值赋给后边下标空了的
}
}
int main ()
{
int k=0;
char arr[]="ABCDEFG";
printf ("请输入任意数字: "); //左旋转几个字母
scanf ("%d",&k);
left_rotate (arr,(sizeof arr/sizeof arr[0]-1),k); //调用函数
printf ("%s\n",arr);
system ("pause");
return 0;
}
思路:
把右移的字母先保存,然后使前边的字母依次后移,最后把刚才保存的右移字符赋值前边空了的下标中,与左移思路相同
#define use _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
void right_rotate ( char *arr,int sz,int k)
{
int i=0;
k=k%sz;
while (k--)
{
char temp=arr[sz-1]; //每次把末尾值存储在临时变量中
for (i=sz-1;i>0;i--)
{
arr[i]=arr[i-1]; //让字符串中内容下标依次后移
}
arr[i]=temp; //把刚存储的值赋给前边下标空了的
}
}
int main ()
{
int k=0;
char arr[]="ABCDEFG";
printf ("请输入任意数字: ");
scanf ("%d",&k);
right_rotate (arr,(sizeof arr/sizeof arr[0]-1),k);
printf ("%s\n",arr);
system ("pause");
return 0;
}
ABCD左旋两个字符得到CDAB,ABCD右旋两个字符得到CDAB,由此可得出一个旋转的字母,通过左旋或者右旋 不同次数都可得到。