您的位置:首页 > 其它

旋转字符串

2014-07-22 16:47 204 查看
比如将串“ABCDEFG”以D为中心旋转,就相当将该串向左循环移位,直到第一个元素为D为止,最后得到新串“DEFGABC”。

1、逐个移动

BCDEFGA,

CDEFGAB

DEFGABC

2、三次翻转

要想方便的完成rotate操作,一个常见的技巧是这样的:先将前半部分反转,再将后半部分反转,最后再将整个串反转即可(这里的前半部分与后半部分是以旋转中心来划分的)。还是以串“ABCDEFG”以D为中心旋转为例,以D为分割点,将先半部分与后半部分分别反转后,得“CBAGFED”,最后将整个串反转即得“DEFGABC”。

第一次翻转:CBA DEFG

第二次翻转:CBA GFED
第三次翻转:DEFGABC

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

void shift1(char *s,int n)
{
int len=strlen(s);
char tmp;
for(int i=0;i<n;i++)
{
tmp=s[0];
for(int j=0;j<len-1;j++)
{
s[j]=s[j+1];
}
s[len-1]=tmp;
}
}

void swap(char *p,int f,int b)
{
char s;
while(f<b)
{
s=p[f];
p[f]=p[b];
p[b]=s;
f++;
b--;
}
}
void shift2(char *p,int n)
{
int len=strlen(p);
swap(p,0,n-1);
swap(p,n,len-1);
swap(p,0,len-1);
}

void main()
{
char p[100];
cin>>p;
int len=strlen(p);
int n=3;
shift2(p,n);
cout<<p<<endl;

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: