【C语言】字符的旋转

问题描述:实现一个函数,可以左旋字符串中的k个字符。
思路:字符的旋转悠很多方法,在这里我要说的是“三步旋转法”。通过把需要旋转的字符串逆置,紧接着把剩下的字符串逆置,最后把所有的字符串逆置得到旋转个k字符。

比如:把ABCDEF左旋2个字符。
第一次把AB逆置,得到:BACDEF
第二次把剩下的字符串逆置,得到:BAFEDC
第三次把所有的字符串逆置,得到:CDEFAB

#include<stdio.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 *src,int i)    //对字符串数组实现左旋
{
  int len=strlen(src)-1;
  reverse(src,src+i-1);     //1.先翻转需要左旋的k个字符
  reverse(src+i,src+len);   //2.将剩下的字符进行翻转
  reverse(src,src+len);     //3.翻转所有的字符
}

int main()
{
   int i=2;     //需要左旋的位数
   char src[]="ABCDEF";
   left_spin(src,i);
   printf("%s\n",src);
   system("pause");
   return 0;
}

结果:
这里写图片描述

右旋和左旋的思路一样,只是在旋转时的left和right不一样。

void right_spin(char *src,int i)
{
  int len=strlen(src)-1;
  reverse(src+len-i,src+len);    //1.先翻转需要右旋的k个字符
  reverse(src,src+len-i);        //2.将剩下的字符进行翻转
  reverse(src,src+len);         //3.翻转所有的字符
}

结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值