实现一个函数,可以左或右旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA。 ABCD左旋两个字符得到CDAB。

思路:
把左移的字母先保存,然后使后边的字母依次前移,最后把刚才保存的左移字符赋值后边空了的下标中

#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,由此可得出一个旋转的字母,通过左旋或者右旋 不同次数都可得到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值