编码实现字符串右移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
}