列如:abcd左旋后是bcda
分两种算法
第一种:
这种算法大致就是:将要旋转的字符串中的字符放入一个临时的空间里面(temp),然后将要旋转的字符后面算起将每一个字符往前调,最后再将临时空间(temp)里的字符放在字符串后面空余的位置
#include <stdio.h>
#include <string.h>
void Move(char ch[],int n)
{
int i=0;
int len=strlen(ch);
for(i=0;i<n;i++)
{
char temp=ch[0];
int j=0;
for(j=0;j<len-1;j++)
{
ch[j]=ch[j+1];
}
ch[len-1]=temp;
}
}
int main()
{
printf("输入字符串:");
char ch[1024];
gets(ch);
Move(ch,2);//旋转2个字符
printf("%s ",ch);
return 0;
}
算法2:
这种算法的思路大概是:
假设有一个字符串:ABCDEF, 左旋二个字符
那么字符串可以分为两部分:AB 和 CDEF
这里我们各将这两部分逆序后再拼在一起——>BAFEDC
再之后我们将这个字符串整体逆序便可以得到——>CDEFAB
#include <stdio.h>
#include <string.h>
void Reverse(char* left,char* right)
{
while(left<right)
{
char temp=*left;
*left=*right;
*right=temp;
left++;
right--;
}
}
void Move(char* ch,int n)
{
int len=strlen(ch);
Reverse(ch,ch+n-1);//逆序左边
Reverse(ch+n,ch+len-1);//逆序右边
Reverse(ch,ch+len-1);//逆序整体
}
int main()
{
char ch[1024];
gets(ch);
Move(ch,2);
printf("%s ",ch);
return 0;
}