编码实现字符串右移n位,如"diopHeg"右移2位为"egdiopH"
思路1:只要把需要移动的最后n个字符保存下来,把前面剩下的全部后移n个位置,最后把开始保存好的n 个字符填充到前面n个位置。注意:n超过字符串长度的情况,所以事前先做n mod 字符串的长度。
01
int RightMoveStr(char* src,int n)
02
{
03
int len=strlen(src);
04
int mov=n%len;
05
char* rstr=(char*)malloc((mov+1)*sizeof(char));
06
if(rstr==NULL)
07
{
08
return 0;
09
}
10
int i=0;
11
while(i<mov)
12
{
13
rstr[i]=src[len-mov+i];
14
i++;
15
}
16
rstr[i]='\0';
17
i=len-mov-1;
18
while(i>=0)
19
{
20
src[i+mov]=src[i];
21
i--;
22
}
23
i=0;
24
while(i<mov)
25
{
26
src[i]=rstr[i];
27
i++;
28
}
29
free(rstr);
30
return 1;
31
}
思路2:使用字符串库函数简化编码工作,用一个新的字符串ss保存结果,先把源字符串指针s移到需要右移的子串的第一个字符的位置,如"diopHeg"右移2位就把s移动到指向'e',接着 strcpy(ss,s),把s所指位置赋值为'\0',最后strcat(ss,s)。
01
int RightMove(char* src,char* &ssrc,int n)
02
{
03
int len=strlen(src);
04
ssrc=(char*)malloc(sizeof(char)*(len+1));
05
n=n%len;
06
if(ssrc==NULL)
07
{
08
return 0;
09
}
10
int i=0;
11
char* s=src;
12
while(i<len-n)
13
{
14
s++;
15
i++;
16
}
17
strcpy(ssrc,s);
18
*s='\0';
19
strcat(ssrc,src);
20
return 1;
21
}